我正在对一个愚蠢的数据库做一些报道,我必须做
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
结果集总是1行,所以John Smith:| 646-465-4566 |有黑莓,棕榈,康柏|喜欢:在沙滩上散步,彩虹,萨克斯管
但是我需要能够在另一个查询中使用它...比如
Select b.Name, c.Number, d.MulitLineCrap FROM Tables
我怎么能这样做,提前谢谢......
顺便说一句,如果有任何想法,我也可以在LINQ中做到这一点......答案 0 :(得分:2)
以下是基于查询创建逗号分隔列表的一种方法(只需替换第一个WITH块内的查询)。现在,如何加入对b和c的查询,我不知道。您需要提供更完整的问题 - 包括有关从第二个查询返回的行数以及“MultilineCrap”对于每个行是否相同或者是否依赖于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
等。我保证,您的查询会更容易阅读。