我目前有一个包含所有数据的表,使用这些数据我想创建另一个可用于审计目的的表(类似于数据透视表的布局)
以下示例:
原始数据
Name Places Visited
----------------------------
Will London
John Toronto
Dave New York
Will London
我想要什么(类似于数据透视表,但我可以使用字母):
Name/Places Visted London Toronto New York
Will Y N Y
John N Y N
Dave N N Y
非常感谢任何帮助产生这一点!
我希望自己能够很好地解释自己,但如果你想澄清一下,请告诉我。
非常感谢!!
答案 0 :(得分:3)
SQL Server 2005/2008的解决方案:
DECLARE @Temp TABLE
(
Name NVARCHAR(100) NOT NULL
,Place NVARCHAR(100) NOT NULL
);
INSERT @Temp
SELECT 'Will','London'
UNION ALL
SELECT 'John','Toronto'
UNION ALL
SELECT 'Dave','New York'
UNION ALL
SELECT 'Will','London';
SELECT
pvt.Name [Name/Places Visted]
,CASE WHEN [London] IS NOT NULL THEN 'Y' ELSE 'N' END [London]
,CASE WHEN [Toronto] IS NOT NULL THEN 'Y' ELSE 'N' END [Toronto]
,CASE WHEN [New York] IS NOT NULL THEN 'Y' ELSE 'N' END [New York]
FROM @Temp src
PIVOT( MAX(src.Place) FOR src.Place IN([London], [Toronto], [New York]) ) pvt
ORDER BY pvt.Name DESC;
结果:
Name/Places Visted London Toronto New York
------------------- ------ ------- --------
Will Y N N
John N Y N
Dave N N Y
注意:PIVOT
操作产生的列是静态的。这意味着如果您使用Place='PARIS'
添加记录,则应修改此查询:PIVOT( MAX(src.Place) FOR src.Place IN([London], [Toronto], [New York], [Paris])
。因此,如果您的城市数量有限,则可以使用PIVOT
运算符。