我在SQL服务器数据库中有以下表格:
[ANIMALS] [COLORS]
ID | NAME ID | NAME
1 Cow 1 Blue
2 Chicken 2 Red
3 Pig 3 Green
4 T-Rex 4 Pink
5 Orange
[RELATIONSHIPS]
ANIMAL ID | COLOR ID
1 3
1 2
1 5
2 1
3 1
3 4
4 1
4 2
4 5
我正在尝试编写一个SQL查询,它将返回动物列表及其各自的颜色。我试图实现的目标如下:
ANIMAL NAME COLORS
Cow Green/ Red / Orange
Chicken Blue
Pig Blue/ Pink
T-Rex Blue/ Red/ Orange
我已经有了一个用户定义的函数,它将创建一个名为udf_Delimit_Colors(@animalID)的分隔字符串(“color / color / etc.”) - @animalID是该UDF中唯一的参数。
我只能通过传入一个动物ID返回一行,现在我很难知道如何在不传递任何ID的情况下实现我的目标。
可以在以下链接中找到分隔的SQL查询: https://sites.google.com/site/sqlblindman/creatingcomma-delimitedstrings
+代表编写它的人。
我还在努力,所以如果我搞清楚,我会发布答案。 提前感谢您的意见。
答案 0 :(得分:2)
根据您的语法,我假设SQL Server为数据库。您可以通过以下方式连接字符串:
SELECT a.name,
LEFT(colors , LEN(colors)-1) colors
FROM animals a
CROSS APPLY
(
SELECT c.name + ' / '
FROM colors c
left join relationships r
on c.id = r.[COLOR ID]
where a.id = r.[ANIMAL ID]
FOR XML PATH('')
) m (colors)
或者:
select a.name,
STUFF((SELECT distinct ' / ' + c.name
from colors c
left join relationships r
on c.id = r.[COLOR ID]
where a.id = r.[ANIMAL ID]
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,2,'') colors
from animals a;
结果是:
| NAME | COLORS |
-----------------------------------
| Cow | Red / Green / Orange |
| Chicken | Blue |
| Pig | Blue / Pink |
| T-Rex | Blue / Red / Orange |