2016-11-08 126 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

你不能有一個表。您可以做的最好的是創建此列,並在用戶界面中添加附加標題。

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)