表1:
编号 名称
01 A
02 B
03 C表2:
编号 日期 备注
0001 2008-10-1 |A|B|
0002 2008-10-2 |A|C|
0001 2008-10-2 |B|C|
0003 2008-10-2 |A|B|C|
0002 2008-10-3 |B|C|想得到如下结果:日期 名称 数量
2008-10-1 A 1
2008-10-1 B 1
2008-10-2 A 2
2008-10-2 B 2
2008-10-2 C 3
2008-10-3 A 0
2008-10-3 B 1
2008-10-3 C 1另外说明一下关系,表2的备注字段内容即为表1的名称字段值和“|”的组合。比较着急,还望各位出手相助。
编号 名称
01 A
02 B
03 C表2:
编号 日期 备注
0001 2008-10-1 |A|B|
0002 2008-10-2 |A|C|
0001 2008-10-2 |B|C|
0003 2008-10-2 |A|B|C|
0002 2008-10-3 |B|C|想得到如下结果:日期 名称 数量
2008-10-1 A 1
2008-10-1 B 1
2008-10-2 A 2
2008-10-2 B 2
2008-10-2 C 3
2008-10-3 A 0
2008-10-3 B 1
2008-10-3 C 1另外说明一下关系,表2的备注字段内容即为表1的名称字段值和“|”的组合。比较着急,还望各位出手相助。
--> 生成测试数据: #tb1
IF OBJECT_ID('tempdb.dbo.#tb1') IS NOT NULL DROP TABLE #tb1
CREATE TABLE #tb1 (编号 VARCHAR(2),名称 VARCHAR(1))
INSERT INTO #tb1
SELECT '01','A' UNION ALL
SELECT '02','B' UNION ALL
SELECT '03','C'
--> liangCK小梁 于2008-10-23
--> 生成测试数据: #tb2
IF OBJECT_ID('tempdb.dbo.#tb2') IS NOT NULL DROP TABLE #tb2
CREATE TABLE #tb2 (编号 VARCHAR(4),日期 DATETIME,备注 VARCHAR(10))
INSERT INTO #tb2
SELECT '0001','2008-10-1','|A|B|' UNION ALL
SELECT '0002','2008-10-2','|A|C|' UNION ALL
SELECT '0001','2008-10-2','|B|C|' UNION ALL
SELECT '0003','2008-10-2','|A|B|C|' UNION ALL
SELECT '0002','2008-10-3','|B|C|'--SQL查询如下:;WITH Liang
AS
(
SELECT a.编号,日期,b.备注
FROM
(
SELECT 编号,日期,
CAST('<root><v>'
+REPLACE(STUFF(LEFT(备注,LEN(备注)-1),1,1,''),'|','</v><v>')
+'</v></root>' AS XML) AS v
FROM #tb2
) AS a
CROSS APPLY
(
SELECT c.value('.','varchar(10)') AS 备注
FROM a.v.nodes('/root/v') AS T(c)
) AS b
)
SELECT CONVERT(VARCHAR(10),日期,120) 日期,备注,
COUNT(*) 数量
FROM Liang
GROUP BY CONVERT(VARCHAR(10),日期,120),备注
ORDER BY 日期;/*
日期 备注 数量
---------- ---------- -----------
2008-10-01 A 1
2008-10-01 B 1
2008-10-02 A 2
2008-10-02 B 2
2008-10-02 C 3
2008-10-03 B 1
2008-10-03 C 1(7 行受影响)*/