2
我有一个特殊的表,我需要使用像substring这样的东西连接,但以特定的方式。将会有很多空值,但我们仍然需要关注它们。MS SQL Server - 以特定方式连接
基本上,我有类似...
PID Date Flag1 Flag2 Code
11 01/01/2014 1 0 16
11 25/12/2014 1 1 48
11 16/07/2016 0 1 9
12 07/01/2014 0 16
12 08/01/2014 1
12 09/01/2014 16
13 01/10/2014 1 4
13 01/11/2014 1 0 16
13 01/12/2014 0 48
会导致(超长)...
PID Date Flag1 Flag2 Code
11 01/01/2014,25/12/2014,16/07/2014, 1,1,0, 0,1,1, 16,48,9,
12 07/01/2014,08/01/2014,09/01/2014, ,1,, 0,,, 16,,16,
13 01/10/2014,01/11/2014,01/12/2014, 1,1,, ,0,0, 4,16,48,
这样一来,在一些代码,我会在以后使用,我将能够确定每个标志属于哪个日期。
任何想法?到目前为止,我只是使用常规的子字符串命令将事物放入正确的字段中,但我不知道属于哪个字段。
SELECT DISTINCT PS2.PID, substring
((SELECT ',' + CAST(CONVERT(VARCHAR(10), PS1.Date, 111) AS NVARCHAR) AS [text()]
FROM dbo.PS PS1
WHERE PS1.PID = PS2.PID
ORDER BY PS1.PID, PS1.Date FOR XML PATH('')), 2, 9999) + ',' [Date], substring
((SELECT ',' + LEFT(CAST(LUC.Code AS NVARCHAR), 2) AS [text()]
FROM dbo.PS PS1 INNER JOIN
dbo.MyCodes LUC ON PS1.Code = LUC.Id
WHERE PS1.PID = PS2.PID
ORDER BY PS1.PID, PS1.Date FOR XML PATH('')), 2, 9999) + ',' [Code], substring
((SELECT ',' + LEFT(CAST(PS1.Flag1 AS NVARCHAR), 1) AS [text()]
FROM dbo.PS PS1
WHERE PS1.PID = PS2.PID
ORDER BY PS1.PID, PS1.Date FOR XML PATH('')), 2, 9999) + ',' [Flag1], substring
((SELECT ',' + LEFT(CAST(PS1.Flag2 AS NVARCHAR), 1) AS [text()]
FROM dbo.PS PS1
WHERE PS1.PID = PS2.PID
ORDER BY PS1.PID, PS1.Date FOR XML PATH('')), 2, 9999) + ',' [Flag2]
FROM dbo.PS PS2
还应注意,我们将始终有一个日期。那不会是空的。与PID一样(就像他们分组的那样)。