有问题找到我的表的查询
我有2个表A和表B如下
table A
---------------------
| Name | addrid |
---------------------
| zlai | 1 |
| blai | 2 |
table B
---------------------
| addrid | addr |
---------------------
| 1 | AMERICA |
| 1 | SPAIN |
| 1 | MEXICO |
| 2 | TURKEY |
Run Code Online (Sandbox Code Playgroud)
我需要的结果是
--------------------------
| Num | Name | addr |
--------------------------
| 1 | zlai | AMERICA |
| | | SPAIN |
| | | MEXICO |
| 2 | blai | TURKEY |
Run Code Online (Sandbox Code Playgroud)
查询我到目前为止已尝试过
SELECT CASE WHEN No != 1
THEN ''
ELSE CAST(a.addrid AS VARCHAR(20))
END AS Num,
CASE WHEN No != 1
THEN ''
ELSE name
END AS name,
addr
FROM
(
SELECT ROW_NUMBER() OVER (PARTITION BY a.addrid
ORDER BY name DESC) AS No,
name,
addr,
a.addrid
FROM a LEFT JOIN b ON a.addrid = b.addrid
) a
ORDER BY a.addrid
Run Code Online (Sandbox Code Playgroud)
我尝试将addrid值修改为101和325(例如)
table A
---------------------
| Name | addrid |
---------------------
| zlai | 101 |
| blai | 325 |
table B
---------------------
| addrid | addr |
---------------------
| 101 | AMERICA |
| 101 | SPAIN |
| 101 | MEXICO |
| 325 | TURKEY |
Run Code Online (Sandbox Code Playgroud)
查询是:
SELECT CASE WHEN No != 1
THEN ''
ELSE CAST(row AS VARCHAR(20))
END AS Num,
CASE WHEN No != 1
THEN ''
ELSE name
END AS name,
addr
FROM
(
SELECT ROW_NUMBER() OVER (PARTITION BY a.addrid
ORDER BY name DESC) AS No,
name,
addr,
DENSE_RANK() OVER (ORDER BY a.addrid) "row"
FROM a LEFT JOIN b ON a.addrid = b.addrid
) a
ORDER BY row
Run Code Online (Sandbox Code Playgroud)
结果和你想要的一样。
| 归档时间: |
|
| 查看次数: |
246 次 |
| 最近记录: |