我想使用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
感谢。