SQL Server 2012 - 用于连接值字符串的Stuff函数

时间:2016-07-29 04:30:47

标签: sql-server-2012

我想使用STUFF返回两个字符串列来连接值列表。但是我会按一个NULL列的字符串列,然后返回NULL,我希望它在NULL时返回列表。

CREATE TABLE #Vendors
(
    vendor varchar(50),
    rate INT,
    client varchar(10),
    part_no varchar(15)
);

INSERT INTO #Vendors
(JERRY, NULL, CLIENT1, 112233),
(JERRY, NULL, CLIENT2, 112234),
(JERRY, '', CLIENT1, 112235),
(JERRY, '', CLIENT2, 112236),
(JERRY, '', CLIENT3, 112237),
(JERRY, 8, CLIENT2, 112238),
(JERRY, 8, CLIENT2, 112239),
(JERRY, 8, CLIENT3, 112240),

select 
    vendor, rate,
    stuff((select ',' + CAST(st2.client as varchar(10))
           from stock st2 
           where st.vendor = st2.vendor 
             and isnull(st.rate, '') = isnull(st2.rate, '')
           group by st2.client
           for xml path('')), 1, 1,'') as clients, 
    stuff((select ',' + CAST(st2.part_no as varchar(10))
           from stock st2 
           where st.vendor = st2.vendor 
             and isnull(st.rate, '') = isnull(st2.rate, '')
           for xml path('')), 1, 1, '') as part_no
from 
    stock st (nolock)
where 
    vendor = 'JERRY'
group by 
    vendor, rate
order by 
    vendor, rate

这是返回的内容:

vendor       rate                   client                             part_no
------------ --------------------   --------------------------------   -----------------------------------------------
JERRY        NULL                   CLIENT1,CLIENT2,CLIENT3            112233,112234,112235,112236,112237
JERRY                               CLIENT1,CLIENT2,CLIENT3            112233,112234,112235,112236,112237
JERRY        8                      CLIENT2,CLIENT3                    112238,112239,112240

供应商和费率是正确的,但客户端和part_no显示相同,因为费率为NULL和''。

如何归还,part_no不能出现多次:

vendor       rate                   client                             part_no
------------ --------------------   --------------------------------   -----------------------------------------------
JERRY        NULL                   CLIENT1,CLIENT2                    112233,112234
JERRY                               CLIENT1,CLIENT2,CLIENT3            112235,112236,112237
JERRY        8                      CLIENT2,CLIENT3                    112238,112239,112240

如果我从isnull中移除isnull(st.rate,'')= isnull(st2.rate,'')

我明白了:

 vendor      rate                   client                             part_no
------------ --------------------   --------------------------------   -----------------------------------------------
JERRY        NULL                   NULL                               NULL
JERRY                               CLIENT1,CLIENT2,CLIENT3            112235,112236,112237
JERRY        8                      CLIENT2,CLIENT3                    112238,112239,112240

感谢。

0 个答案:

没有答案