开发者

Return Multi Row DataSet as Single Row CSV without Temp Table

I'm doing some reporting against a silly database and I have to do

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

Which Returns Multiple Rows

 Palm
 Compaq
 Blackberry

Edit * Schema is

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

Result set will always be 1 row, so John Smith: | 646-465-4566 | Has a Blackberry, Palm, Compaq | Likes: Walks on the beach, Rainbows, Saxophone

However I need to be able to use this within another query ... like

Select b.Name, c.Number, d.MulitLineCrap FROM Tables 

How can I go about this, Thanks in advance ...

BTW I could also do it in LINQ if any body had any ideas ...


Here is one way to make a comma-separated list based on a query (just replace the query inside the first WITH block). Now, how that joins up with your query against b and c, I have no idea. You'll need to supply a more complete question - including specifics on how many rows come back from the second query and whether "MultilineCrap" is the same for each of those rows or if it depends on data in b/c.

;WITH x([DESC]) AS 
(
  SELECT d FROM (VALUES('Palm'),('Compaq'),('Blackberry')) AS x(d)
)
SELECT STUFF((SELECT ',' + [DESC]
  FROM x 
  FOR XML PATH(''), TYPE).value(N'./text()[1]', N'varchar(max)'),1,1,'');

EDIT

Given the new requirements, perhaps this is the best way:

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;

Please use aliases that make a little bit of sense, instead of just serially applying a, b, ,c, etc. Your queries will be easier to read, I promise.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜