2016-11-08 1 views
0

나는 SQL에 익숙하며 Quires를 쓰는 것을 배우고 있습니다. 도와주세요. 덕분에 사전. SQL 쿼리의 피벗 열에서 피벗

사실 나는이 query

select * from 
(select case Temp 
      when '0' then 'Temperature' 
      when '1' then 'PULSE RATE/MIN' 
      when '2' then 'RESPIRATION/MIN' 
      when '3' then 'BLOOD PRESSURE' 
      when '4' then 'URINE' 
     end as Temp, 
     Value, 
     convert(nvarchar(15),Date,103) Date, 
     concat(case Time 
       when '0' then '2' 
       when '1' then '6' 
       when '2' then '10' 
       end,' ', 
       case AMPM 
       when '0' then 'AM' 
       when '1' then 'PM' 
       end)[Tim] 
from HMS_Chart_Clinical 
where status = '0' and IPNO='21460') as s 
pivot(max(Value) for [date] in ([07/11/2016],[08/11/2016])) as datapivot 
pivot(max(Tim) for [Tim] in ([2 AM],[6 AM],[10 AM],[2 PM],[6 PM],[10 PM])) as datapivot 

image

을 사용하여 다음과 같은 결과 테이블을 geeting하고 그러나 나는 울부 짖는 결과 테이블이 필요합니다.

image2

+1

데이터가있는 SQLfiddle은 이러한 종류의 질문에 적합합니다. –

+1

정확한 테이블은 테이블이 아니기 때문에 sqlserver에 존재할 수 없습니다. – Mihai

답변

0

당신은 그 테이블이 기운 다. 가장 좋은 방법은이 열을 대신 작성하고 UI에 추가 헤더를 추가하는 것입니다.

07/11/2016 02:00 am 
07/11/2016 06:00 am 
07/11/2016 10:00 am 
07/11/2016 02:00 pm 
07/11/2016 06:00 pm 
07/11/2016 10:00 pm 
08/11/2016 02:00 am 
08/11/2016 06:00 am 
08/11/2016 10:00 am 
08/11/2016 02:00 pm 
08/11/2016 06:00 pm 
08/11/2016 10:00 pm 

그래서

concat(convert(nvarchar(15),Date,103) Date, 
     case Time 
      when '0' then '2' 
      when '1' then '6' 
      when '2' then '10' 
     end,' ', 
     case AMPM 
      when '0' then 'AM' 
      when '1' then 'PM' 
     end) as [Tim] 

에 조회를 변경하고 하나의 피벗

pivot(max(Tim) for [Tim] in ([07/11/2016 02 AM], 
          [07/11/2016 06 AM], 
          [07/11/2016 10 AM], 
          [07/11/2016 02 PM], 
          [07/11/2016 06 PM], 
          [07/11/2016 10 PM]) .....) as datapivot 
0

내가 질문에 관련이없는이 문제를 사용합니다. 그래서 원래 사고 방식에 너무 많은 영향을 미치지 않고 :

DECLARE @HMS_Chart_Clinical TABLE (
[ID]  INT PRIMARY KEY NOT NULL IDENTITY (1,1), 
[Temp] INT, --0,1,2,3,4 
[Value] INT, 
[Date] DATE, 
[Time] INT, -- 0,1,2 
[AMPM] INT, -- 0,1 
[status] BIT, 
[IPNO] INT 
) 

INSERT @HMS_Chart_Clinical ([Temp], [Value], [Date], [Time], [AMPM], [status], [IPNO]) VALUES (3, 125, '20161107', 2, 0, 0, 21460) 
INSERT @HMS_Chart_Clinical ([Temp], [Value], [Date], [Time], [AMPM], [status], [IPNO]) VALUES (1, 26, '20161108', 2, 1, 0, 21460) 
INSERT @HMS_Chart_Clinical ([Temp], [Value], [Date], [Time], [AMPM], [status], [IPNO]) VALUES (1, 99, '20161107', 1, 1, 0, 21460) 
INSERT @HMS_Chart_Clinical ([Temp], [Value], [Date], [Time], [AMPM], [status], [IPNO]) VALUES (0, 106, '20161107', 0, 0, 0, 21460) 

IF OBJECT_ID('tempdb..#PivotSource') IS NOT NULL 
    DROP TABLE #PivotSource 

    CREATE TABLE #PivotSource 
    (
    Temp  VARCHAR(MAX), 
    Value  INT, 
    [DateTime] VARCHAR(MAX) 
) 
    INSERT INTO #PivotSource 
    SELECT CASE Temp 
      WHEN '0' THEN 'Temperature' 
      WHEN '1' THEN 'PULSE RATE/MIN' 
      WHEN '2' THEN 'RESPIRATION/MIN' 
      WHEN '3' THEN 'BLOOD PRESSURE' 
      WHEN '4' THEN 'URINE' 
     END AS Temp, 
     Value, 
     CONVERT(NVARCHAR(15),[Date],103) + ' ' + 
     CASE [Time] 
      WHEN '0' THEN '2' 
      WHEN '1' THEN '6' 
      WHEN '2' THEN '10' 
     END + ' ' + 
     CASE AMPM 
      WHEN '0' THEN 'AM' 
      WHEN '1' THEN 'PM' 
     END AS [DateTime] 
    FROM @HMS_Chart_Clinical 
    WHERE [status] = '0' 
    AND IPNO='21460' 

DECLARE @PivotColumns NVARCHAR(MAX) 

;WITH AllDatesAndTimes AS (
    SELECT DISTINCT [Date], 
      TimeString.[Time], 
      TimeString.[SortOrder] 
     FROM @HMS_Chart_Clinical 
CROSS JOIN (SELECT '2 AM' AS [Time], 0 AS SortOrder 
    UNION ALL SELECT '6 AM' AS [Time], 1 AS SortOrder 
    UNION ALL SELECT '10 AM' AS [Time], 2 AS SortOrder 
    UNION ALL SELECT '2 PM' AS [Time], 3 AS SortOrder 
    UNION ALL SELECT '6 PM' AS [Time], 4 AS SortOrder 
    UNION ALL SELECT '10 PM' AS [Time], 5 AS SortOrder) TimeString 
) 
SELECT @PivotColumns = COALESCE(@PivotColumns + '], [', '') + CONVERT(NVARCHAR(15),[Date],103) + ' ' + [Time] 
FROM AllDatesAndTimes 
ORDER BY [Date],[SortOrder] 

DECLARE @PivotQuery NVARCHAR(MAX) = 'SELECT * FROM #PivotSource PIVOT(MAX(Value) FOR [DateTime] IN ([' + @PivotColumns + '])) AS DATAPIVOT' 
EXEC(@PivotQuery)