【发布时间】:2021-06-25 07:25:36
【问题描述】:
我有一个包含此列的客户数据库(示例):
| ID | TIMESTAMP | TYP_EVEN | NAME | COUNTRY | GENDER | NBR_CHILDREN | ADRESS | CUSTOMER_LINKED | TYP_OF_LINK |
|---|---|---|---|---|---|---|---|---|---|
| 044348547 | 2020-09-08-02.02.21.442908 | 0004 | NXXX CORINNE | FRA | 2 | 02 | 000000000 | ||
| 044379039 | 2020-07-17-11.17.55.410843 | 0013 | 00 | 11 RUE XXXX XXX | 000000000 | ||||
| 044379039 | 2020-07-21-16.45.53.485200 | 0004 | KXXX STEPHANE | FRA | 1 | 00 | 000000000 | ||
| 044379039 | 2020-08-05-02.02.41.403053 | 0004 | KXXX STEPHANE | FRA | 1 | 00 | 000000000 | ||
| 044385911 | 2019-01-31-02.03.22.455660 | 0004 | SXXX PHILIPPE | FRA | 1 | 02 | 000000000 | ||
| 044385911 | 2020-09-18-15.46.31.387588 | 0004 | SXXX PHILIPPE | FRA | 1 | 02 | 000000000 | ||
| 044385911 | 2020-09-30-02.01.45.310449 | 0004 | SXXX PHILIPPE | FRA | 1 | 02 | 000000000 | ||
| 044385911 | 2020-10-01-00.06.20.341427 | 0013 | 00 | 19 RUE XXXX XXXX | 000000000 | ||||
| 044680501 | 2021-03-10-02.02.42.979297 | 0004 | HXXX STEPHANE | FRA | 1 | 00 | 000000000 | ||
| 044680501 | 2021-03-10-02.02.42.980069 | 0013 | 00 | 22 RUE XXXX XXXX | 000000000 | ||||
| 044680501 | 2021-03-10-02.02.42.981083 | 0029 | 00 | 044680519 | MARIED | ||||
| 044680519 | 2021-03-10-02.02.42.966522 | 0004 | HXXX LIDWINE | FRA | 2 | 02 | 000000000 | ||
| 044680519 | 2021-03-10-02.02.42.970031 | 0029 | 00 | 044680501 | MARIED |
TYP_EVEN : 是关于每个客户 ID 的记录的事件类型,然后 OOO4 : 是关于客户的信息 (NAME, COUNTRY, GENDER, Number of children ), 0013 : 是关于 ADRESS 信息和 0029 : 是关于链接 beetwen 客户
我想按 ID 列出所有信息。我是这样进行的:
SELECT
T1.ID,
CASE WHEN T1.TYP_EVEN = '0004' THEN T1.NAME END AS NAME,
CASE WHEN T1.TYP_EVEN = '0004' THEN T1.COUNTRY END AS COUNTRY,
CASE WHEN T1.TYP_EVEN = '0004' THEN T1.GENDER END AS GENDER,
CASE WHEN T1.TYP_EVEN = '0004' THEN T1.NBR_CHILDREN END AS NBR_CHILDREN,
CASE WHEN T1.TYP_EVEN = '0013' THEN T1.ADRESS END AS ADRESS,
CASE WHEN T1.TYP_EVEN = '0029' THEN T1.CUSTOMER_LINKED END AS CUSTOMER_LINKED,
CASE WHEN T1.TYP_EVEN = '0029' THEN T1.TYP_OF_LINK END AS TYP_OF_LINK
,T1.TIMESTAMP
FROM DB.CUSTOMERS T1
GROUP BY GROUP BY T1.ID,T1.TIMESTAMP, T1.TYP_EVEN,T1.NAME,T1.COUNTRY,T1.GENDER,T1.NBR_CHILDREN,T1.ADRESS
,T1.CUSTOMER_LINKED, T1.TYP_OF_LINK
ORDER BY 1
结果应该是:
| ID | NAME | COUNTRY | GENDER | NBR_CHILDREN | ADDRESS | CUSTOMER_LINKED | TYP_OF_LINK | ||
|---|---|---|---|---|---|---|---|---|---|
| 044348547 | NXXX CORINNE | FRA | 2 | 02 | 11 RUE XXXX XXX | 000000000 | |||
| 044379039 | KXXX STEPHANE | FRA | 1 | 00 | 000000000 | ||||
| 044385911 | SXXX PHILIPPE | FRA | 1 | 02 | 19 RUE XXXX XXXX | 000000000 | |||
| 044680501 | HXXX STEPHANE | FRA | 1 | 00 | 22 RUE XXXX XXXX | 044680519 | MARIED | ||
| 044680519 | HXXX LIDWINE | FRA | 2 | 02 | 044680501 | MARIED |
更多信息:如果一个 ID 有 2 行具有相同的 TYP_EVEN,则通过 TIMESTAMP 选择后者。
有人可以解决这个 SQL 语句吗?
【问题讨论】:
-
“它不起作用”并没有告诉我们太多,请更加明确。此外,
GROUP BY应该与聚合一起使用,如果您想要唯一的行,请使用DISTINCT。如果一个 id 有多个 TYP_EVEN 值,你想要什么? -
使用 DISTINCT 也不起作用。
-
就像我说的,简单地说明某事不起作用是没有帮助的
-
如果一个 ID 有多个 TYP_EVEN 值,我想将它连接到一行
-
怎么样?您希望看到哪个值?