我有这张桌子:
VAT | Emails
000 | a@a.it, b@b.it, c@c.it, d@d.it
我想要这个结果:
<Application.Resources>
<Style TargetType="{x:Type ToolTip}">
<Setter Property="Template" Value="{x:Null}" />
</Style>
</Application.Resources>
如何在SQL中执行此操作?
请注意,我希望同时连接多个和列的值。
答案 0 :(得分:2)
嗯,这不是与question Lad2025相关联的完全重复, 但该问题的答案确实显示了如何将不同行的值转换为逗号分隔的字符串 您还要做的一件事是从两列中获取每个增值税的明确电子邮件列表。 这是一种方法:
首先,创建并填充样本表(请在将来的问题中保存此步骤):
DECLARE @T AS TABLE
(
VAT char(3),
Email1 char(6),
Email2 char(6)
)
INSERT INTO @T(VAT,Email1, Email2) VALUES
('000', 'a@a.it', 'b@b.it'),
('000', 'a@a.it', NULL),
('000', 'a@a.it', 'c@c.it'),
('000', NULL, 'd@d.it')
然后,使用公用表表达式使用email1
组合email2
和union
的值。
请注意,union
会删除重复的值,因此您将获得每个增值税值的不同电子邮件列表:
;WITH CTE AS
(
SELECT VAT, Email1 As Email
FROM @T
UNION
SELECT VAT, Email2
FROM @T
)
然后使用for xml path
从cte的电子邮件列中获取以逗号分隔的列表(将忽略null
值),并使用stuff
删除第一个逗号:
SELECT DISTINCT VAT,
(
SELECT STUFF(
(SELECT ',' + Email
FROM CTE t1
WHERE t0.VAT = t1.VAT
FOR XML PATH(''))
, 1, 1, '')
) As Emails
FROM CTE t0
结果:
VAT Emails
000 a@a.it,b@b.it,c@c.it,d@d.it
答案 1 :(得分:0)
这是另一种选择,但上述情况可能会更快。
cljs.user=> (def ids [{:x 1 :y 2} {:x 3 :y 4}])
#'cljs.user/ids
cljs.user=> (let [tr [:tr
#_=> [:td "first col"]
#_=> [:td "second col"]]]
#_=> (reduce (fn [acc id]
#_=> (into acc
#_=> [[:td [:span (:x id)]]
#_=> [:td [:span (:y id)]]]))
#_=> tr
#_=> ids))
[:tr [:td "first col"] [:td "second col"] [:td [:span 1]] [:td [:span 2]] [:td [:span 3]] [:td [:span 4]]]
cljs.user=>
结果:
DECLARE @TBL TABLE(VAT varchar(10), Email1 varchar(50), Email2 varchar(50))
INSERT INTO @TBL select '000','a@a.it','b@b.it'
INSERT INTO @TBL select '000','a@a.it',''
INSERT INTO @TBL select '000','a@a.it','c@c.it'
INSERT INTO @TBL select '000','pizz@pizza.com','d@d.it'
INSERT INTO @TBL select '001','slice@pizza.com','d@d.it'
INSERT INTO @TBL select '001','pizz@pizza.com','q@q.it'
INSERT INTO @TBL select '001','cheese@pizza.com','s@s.it'
INSERT INTO @TBL select '001','slice@pizza.com','s@s.it'
INSERT INTO @TBL select '001',NULL,'s@s.it'
SELECT VAT, '' + REVERSE(STUFF(REVERSE(( select x.Email + ','
FROM (
select VAT, Email1 as Email
from @TBL T2
WHERE T2.VAT = T1.VAT
AND ISNULL(Email1,'') > ''
GROUP BY VAT, EMAIL1
union
select VAT, Email2 as Email
from @TBL T3
WHERE T3.VAT = T1.VAT
AND ISNULL(Email2,'') > ''
GROUP BY VAT, EMAIL2
) x
FOR XML PATH('')
)), 1, 1, '' ) ) + '' as Email
from @TBL T1
GROUP by T1.VAT