簡體   English   中英

SQL查詢轉換邏輯

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM