簡體   English   中英

如何在SQL中以列的形式轉換表行

[英]How to convert the table rows in form of columns in SQL

您好我有兩個表,我想生成報告,其中所有行將在單行。

tbl_Questions

Id  Name
---------
1   Abc
2   Cde
3   xyz
4   MMM

tbl_Reponses

Id  QuestionId   Values
------------------------
1      1           123
2      2           456
3      3           444

現在我想得到一個查詢,它會在結果中顯示這樣的時間。

Id Abc Cde xyz MMM
-------------------
1  123 456 444 

如何通過查詢獲得此信息?

使用PIVOT來做到這一點:

SELECT ROW_NUMBER() OVER(ORDER BY [Abc])Id,* FROM
(
SELECT Name,Value FROM tbl_Questions A LEFT JOIN tbl_Reponses B ON A.Id=B.Id
) AS tbl
PIVOT(SUM(Value) FOR Name IN([Abc],[Cde],[xyz],[MMM]))AS pvt

CrossTab方法

SELECT
    ROW_NUMBER() OVER (ORDER BY MAX(A.Id))Id,
    [Abc] = MAX(CASE WHEN Name = 'Abc' THEN Value END),
    [Cde] = MAX(CASE WHEN Name = 'Cde' THEN Value END),
    [xyz] = MAX(CASE WHEN Name = 'xyz' THEN Value END),
    [MMM] = MAX(CASE WHEN Name = 'xyz' THEN Value END)
FROM tbl_Questions A LEFT JOIN tbl_Reponses B ON A.Id=B.Id

使用Group by

select 
ID
, MIN(CASE WHEN A.NAME ='ABC'
THEN B.VALUES
END) ABC
, MIN(CASE WHEN A.NAME ='cde'
THEN B.VALUES
END) cde
, MIN(CASE WHEN A.NAME ='xyz'
THEN B.VALUES
END) xyz
, ISNULL(MIN(CASE WHEN A.NAME ='mmm'
THEN B.VALUES
END),'') mmm
FROM
tbl_Questions A
inner join tbl_Reponses B
on A.ID=B.ID
group by A.ID

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM