我如何显示1列水平sql值?



我对sql有一个非常小的了解,但我正试图创建一个基于Confluence宏过滤器的sql表。

我有2个表,我不知道如何写sql来显示我需要什么。

表名= T1

| Key  | Title | Developer | Links               |
| ---- | ----- | --------- | ------------------- |
| RD-1 | Gray  | Jon Cruz  | PD-2, LD-4          |
| RD-2 | Blue  | Drew Lee  | PD-30, LD-12, PD-23 |

表名= T2

| Key   | Assignee   | Links       |
| ----- | ---------- | ----------- |
| PD-30 | Kurt Penn  | RD-2        |
| PD-2  | Jury Souk  | RD-1, LD-4  |
| LD-4  | Grace Chen | RD-1, PD-2  |
| LD-12 | Gram Bron  | RD-2, PD-23 |
| PD-23 | Peter Tiu  | RD-2, LD-12 |

result Table应该是:

| Key  | Title | Developer | PD Assignee          | LD Assignee |
| ---- | ----- | --------- | -------------------- | ----------- |
| RD-1 | Gray  | Jon Cruz  | Jury Souk            | Grace Chen  |
| RD-2 | Blue  | Drew Lee  | Kurt Penn, Peter Tiu | Gram Bron   |

在我尝试的情况下,它显示了多行RD-1和RD-2。
我当时所做的是为PD和LD单独的表,并使用多个左连接(如下所示),但想限制表的数量,所以我想请求您的帮助。

SELECT 
T1.Key, T1.Title, T1.Developer, T2.'Assignee' PD Assignee, 
T3.'Assignee' 'PD2 Assignee', T4.'Assignee' 'LD Assignee',

FROM 
T1 LEFT JOIN T2 ON T1.'Key' IN T2.'Links'
LEFT JOIN T3 ON T1.'Key' IN T3.'Links'
LEFT JOIN T4 ON T1.'Key' IN T4.'Links';

谢谢!

如果您不喜欢连接,您可以尝试这样做)。所以,你可以把它标记为答案,如果它是它。

SELECT 
T1.[Key]
,T1.[Title]
,T1.[Developer]
,[PD Assignee]= (
SELECT stuff
(
(
SELECT ','+ T2.[Assignee] 
FROM T2  
WHERE T2.[Links] LIKE ('%' + T1.[Key] + '%') AND T2.[Key] LIKE '%PD%' 
FOR xml PATH('')
)
, 1, 1, ''
)
)
,[LD Assignee]= (
SELECT stuff
(
(
SELECT ','+ T2.[Assignee] 
FROM T2  
WHERE T2.[Links] LIKE ('%' + T1.[Key] + '%') AND T2.[Key] LIKE '%LD%' 
FOR xml PATH('')
)
, 1, 1, ''
)
)
FROM T1

最新更新