SQL 查询:创建在选定列上具有不同值的表

问题描述 投票:0回答:1

我对 SQL 还很陌生。我有一个查询要构造并填充一个像这样的表:

SELECT
   A.ID as Identification,
   B.Name as Family_name,
   B.Firstname as first_name,
   B.Address as adress_1
FROM A 
   LEFT JOIN B ON B.ID = A.ID

UNION 

SELECT
   C.ID as Identification,
   D.Name as Family_name,
   D.Firstname as first_name,
   D.Address as adress_1
FROM C 
   LEFT JOIN D on D.ID = C.ID

UNION 

...

有没有办法在开头添加“DISTINCT”,以便当Identification、Family_name 和First_name(但不是ADRESS_1)相同时,只出现一行?

例如:

身份证明 姓氏 名字 地址_1
护照 德米尔 阿桑 大街123号
护照 德米尔 阿桑 唐宁街 10 号
驾照 德米尔 阿桑 唐宁街 10 号
护照 德米尔 艾莉芙 大街123号

我看到了一些解决方案,但有第二个查询,而不是同一个查询。 感谢您的帮助 阿肯

我尝试过

DISTINCT (ID, name, firstname) from ( Myquery)

但是没有成功。我也尝试过:

Select Distinct Identification, Family_Name, First_Name
Union
Select
A.ID as Identification,
...

这似乎效果更好,但我收到一条错误消息

“身份”不是有效列。

sorting distinct
1个回答
0
投票

我会这样做的方式是:

WITH raw AS (
    SELECT
        A.ID as Identification,
        B.Name as Family_name,
        B.Firstname as first_name,
        B.Address as adress_1
    FROM A 
        LEFT JOIN B ON B.ID = A.ID

    UNION 

    SELECT
        C.ID as Identification,
        D.Name as Family_name,
        D.Firstname as first_name,
        D.Address as adress_1
    FROM C 
        LEFT JOIN D on D.ID = C.ID

    UNION 

    ...
)
SELECT
    Identification, Family_name, first_name, STRING_AGG(address_1, ', ') AS address_1
FROM raw
GROUP BY Identification, Family_name, first_name
© www.soinside.com 2019 - 2024. All rights reserved.