【发布时间】:2014-10-03 16:28:16
【问题描述】:
我有以下场景。
源表 1
CREATE TABLE #Table1
(
Div varchar(10),
Dept varchar(10),
States varchar(10)
)
INSERT INTO #Table1
SELECT 'Div1','Dept1','CA,NV,TX'
UNION ALL
SELECT 'Div2','Dept2','MI,OH,IN'
UNION ALL
SELECT 'Div3','Dept2','NY,NJ,PA'
UNION ALL
SELECT 'Div4','Dept1',NULL
源表 2
CREATE TABLE #Table2
(
Div varchar(10),
Dept varchar(10),
States varchar(10)
)
INSERT INTO #Table2
SELECT 'Div1','Dept1','CA'
UNION ALL
SELECT 'Div1','Dept1','NV, TX'
UNION ALL
SELECT 'Div1','Dept1','TX, CA'
UNION ALL
SELECT 'Div1','Dept1','CA, NV'
UNION ALL
SELECT 'Div2','Dept2','MI, OH'
UNION ALL
SELECT 'Div2','Dept2','MI, IN'
UNION ALL
SELECT 'Div2','Dept2','OH'
UNION ALL
SELECT 'Div3','Dept2','NY, NJ, PA'
期望的输出
CREATE TABLE #Table3
(
Div varchar(10),
Dept varchar(10),
States varchar(50)
)
INSERT INTO #Table3
SELECT 'Div1','Dept1','CA - (3), NV - (2), TX - (2)'
UNION ALL
SELECT 'Div2','Dept2','MI - (2), OH - (2), IN - (1)'
UNION ALL
SELECT 'Div3','Dept2','NY - (1), NJ - (1), PA - (1)'
UNION ALL
SELECT 'Div4','Dept1',NULL
SELECT * FROM #Table1
SELECT * FROM #Table2
SELECT * FROM #Table3
DROP TABLE #Table1
DROP TABLE #Table2
DROP TABLE #Table3
目标:基于#Table1 和#Table2,在Div 和Dept 字段上连接两个表,然后在States 字段中聚合不同状态的计数,并在您拥有Div 的位置创建输出、Dept 和 States,并在状态旁边打印每个状态的唯一计数。
我不确定如何实现这一点。我正在尝试LIKE,但不能完全弄清楚如何使其动态化。我会继续尝试看看我是否能弄清楚。想我会在这里发布这个问题,看看我是否可以得到一些帮助。
谢谢
更新:
期望的输出
Div Dept States
Div1 Dept1 CA - (3), NV - (2), TX - (2)
Div2 Dept2 MI - (2), OH - (2), IN - (1)
Div3 Dept2 NY - (1), NJ - (1), PA - (1)
Div4 Dept1 NULL
【问题讨论】:
-
你能在问题中添加你想要的输出吗?
-
@ZoffDino 想要的输出是
#Table3中的数据集 -
多个值不应该存储在一个字段中,如果标准化会容易得多。
-
我猜状态计数仅基于
Table2中出现的内容? -
States 列绝对应该标准化
标签: sql sql-server tsql sql-server-2012