[英]SQL query for a transformation logic
輸入:
表格1:
Col1 Col2
1 ABC
2 XYZ
3 PQR
4 ASD
5 QWE
表2:
Col1 col2
ABC .35
ABC .65
XYZ .3
XYZ .3
XYZ .4
PQR .2
PQR .4
PQR .3
PQR .1
QWE 1
輸出:
Col1 pct1 pct2 pct3 pct4
1 .35 .65 0 0
2 .3 .3 .4 0
3 .2 .4 .3 .1
4 1 0 0 0
5 1 0 0 0
如何在SQL Server中實現呢?
您可以使用PIVOT
,但是首先必須使用ROW_NUMBER()
對每個組的行進行排名:
WITH Ranked
AS
(
SELECT
t1.Col1,
t2.Col2,
ROW_NUMBER() OVER(PARTITION BY t1.Col2 ORDER BY t1.Col2) AS RN
FROM Table1 AS t1
LEFT JOIN Table2 AS t2 ON t1.Col2 = t2.Col1
)
SELECT Col1,
COALESCE([1], 0) AS pct1,
COALESCE([2], 0) AS pct2,
COALESCE([3], 0) AS pct3,
COALESCE([4], 0) AS pct4
FROM Ranked AS r
PIVOT
(
MAX(Col2)
FOR RN IN([1], [2], [3], [4])
) AS p;
結果:
| Col1 | pct1 | pct2 | pct3 | pct4 |
|------|------|------|------|------|
| 1 | 0.35 | 0.65 | 0 | 0 |
| 2 | 0.3 | 0.3 | 0.4 | 0 |
| 3 | 0.2 | 0.4 | 0.3 | 0.1 |
| 4 | 0 | 0 | 0 | 0 |
| 5 | 1 | 0 | 0 | 0 |
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.