我对 SQL 很陌生,不知道如何完成以下任务:我在表中有一组数据,我需要将数据转换为两个值之一,然后将每个值的总数相加一对汇总列中的行。见下文:
表1:
row P1 P2 P3
--- --- --- ---
1 a b c
2 a a a
3 b c b
4 a b b
5 NULL NULL NULL
转换表为:
PNum PType
---- -----
a car
b truck
c car
期望的最终结果:
row P1 P2 P3 numCars numTrucks
--- --- --- --- ------- ---------
1 a b c 2 1
2 a a a 3 0
3 b c b 1 2
4 a b b 1 2
5 NULL NULL NULL NULL NULL
获取测试表的代码:
DECLARE @tbl1 TABLE(P1 VARCHAR,P2 VARCHAR,P3 VARCHAR)
INSERT INTO @tbl1
SELECT 'a','b','c' UNION ALL
SELECT 'a','a','a' UNION ALL
SELECT 'b','c','b' UNION ALL
SELECT 'a','b','b'
DECLARE @tbl2 TABLE(PNum VARCHAR,PType NVARCHAR(100))
INSERT INTO @tbl2
SELECT 'a','car' UNION ALL
SELECT 'b','truck' UNION ALL
SELECT 'c','car'
我一直在研究 PIVOT,但我很难看到如何实现它,(尤其是转换部分)。我考虑过尝试首先插入一组列来转换值(例如“P1_converted”),然后尝试总结它们,但我的实际表有 10 个这些类型的列,我不想添加额外的 10 列如果有更简单的方法,请放到桌子上。有什么想法吗?谢谢!
我正在使用 SQL Server 2008。