Sql server 以单行CSV形式返回多行数据集,不带临时表
我正在对一个愚蠢的数据库做一些报告,我必须这样做Sql server 以单行CSV形式返回多行数据集,不带临时表,sql-server,tsql,sql-server-2008,Sql Server,Tsql,Sql Server 2008,我正在对一个愚蠢的数据库做一些报告,我必须这样做 SELECT [DESC] as 'Description' FROM dbo.tbl_custom_code_10 a INNER JOIN dbo.Respondent b ON CHARINDEX(',' + a.code + ',', ',' + b.CC10) > 0 WHERE recordid = 116 它返回多行 Palm Compaq Blackberry 编辑* 模式是 Respondent Table
SELECT [DESC] as 'Description'
FROM dbo.tbl_custom_code_10 a
INNER JOIN dbo.Respondent b ON CHARINDEX(',' + a.code + ',', ',' + b.CC10) > 0
WHERE recordid = 116
它返回多行
Palm
Compaq
Blackberry
编辑*
模式是
Respondent Table (At a Glance) ...
*recordid lname fname address CC10 CC11 CC12 CC13*
116 Smith John Street 1,4,5, 1,3,4, 1,2,3, NULL
Tbl_Custom_Code10
*code desc*
0 None
1 Palm
10 Samsung
11 Treo
12 HTC
13 Nokia
14 LG
15 HP
16 Dash
结果集始终为一排,因此John Smith:| 646-465-4566 |有黑莓、Palm、康柏|喜欢:沙滩漫步、彩虹、萨克斯管
然而,我需要能够在另一个查询中使用这个。。。像
Select b.Name, c.Number, d.MulitLineCrap FROM Tables
我该怎么做,提前谢谢你
顺便说一句,如果任何人有任何想法,我也可以在林克做 这里有一种基于查询生成逗号分隔列表的方法(只需将第一个块中的查询替换为块)。现在,这与你对b和c的查询有什么联系,我不知道。您需要提供一个更完整的问题,包括第二次查询返回的行数,以及这些行的“multilecrap”是否相同,或者是否取决于b/c中的数据
;WITH x([DESC]) AS
(
SELECT 'Palm'
UNION ALL SELECT 'Compaq'
UNION ALL SELECT 'Blackberry'
),
y([DESC]) AS
(
SELECT ',' + [DESC]
FROM x
FOR XML PATH('')
)
SELECT MultilineCrap = STUFF([DESC], 1, 1, '')
FROM y;
编辑
考虑到新的要求,也许这是最好的方法:
CREATE FUNCTION dbo.GetMultiLineCrap
(
@s VARCHAR(MAX)
)
RETURNS VARCHAR(MAX)
AS
BEGIN
DECLARE @x VARCHAR(MAX) = '';
SELECT @x += ',' + [desc]
FROM dbo.tbl_custom_code_10
WHERE ',' + @s LIKE '%,' + RTRIM(code) + ',%';
RETURN (SELECT STUFF(@x, 1, 1, ''));
END
GO
SELECT r.LName, r.FName, MultilineCrap = dbo.GetMultiLineCrap(r.CC10)
FROM dbo.Respondent AS r
WHERE recordid = 116;
请使用一些有意义的别名,而不是仅仅连续应用
a
、b
、、c
,等等。我保证,您的查询会更容易阅读。只是好奇为什么您会人为地限制您的解决方案,说“没有临时表”?如果解决方案有效且速度足够快,为什么您会关心它是否使用临时表?@Aaron感谢您的回复。。。MSSQL 2008。。。我的T-SQL有点生疏(该死的LINQ!)我可以在select语句中使用临时表吗?那太好了,我们需要更多的信息。“表”b和c与tbl_自定义_代码_10和dbo.答辩人的输出有何关联?为什么第一个查询使用recordid=116?这取决于第二个查询的输出吗?我在上面补充说,结果集总是一行,它将是受访者的状态报告,因此John Smith:| 646-465-4566 |有黑莓、Palm、康柏|喜欢:在海滩上散步、彩虹、,萨克斯管等…感谢你们面对我明显无法正确陈述这个问题的病人。。。还有一个简单的问题,你能把表格作为MSSQL中的参数传递进来吗。。。我有自定义表1-100…不,你不能在函数中动态命名表,这需要动态SQL,而函数中不支持动态SQL。如果所有自定义表都有相同的基本列,我将实现一个表,其中1-100作为INT列/键,以定义您正在谈论的“表”。不,您也不希望在块时保持100大小写。如果实现一个表而不是100个表,则只需要一个额外的where子句,例如dbo.tbl_custom_codes,其中codeset=10和…
。啊,很遗憾,我没有应用程序的源代码,因此无法更改数据库的架构。。。