我有以下表格(简化):
CUSTOMER_ID NAME PHONE AGE HEIGHT
1 MANOLO 987456321 56 1.80
1 MANOLO NULL 56 1.79
2 LUCÍA NULL 56 1.50
2 LUCÍA 987456321 56 1.50
我期望的结果是只选择值彼此不同的单元格,即我期望的结果是:
ID_CLIENT NAME PHONE AGE HEIGHT
1 - 987456321 - 1.80
1 - NULL - 1.79
2 - NULL - -
2 - 987456321 - -
我尝试过对表本身使用join,但结果保持嵌套,而不是在不同的行中。我有一种感觉,必须使用某种join或交集,因为最接近我所要求的结果是通过使用UNION实现的:
SELECT '-' AS NAME , PHONE , 0,
FROM [test_temp].[dbo].[CUSTOMER3].
UNION
SELECT '-' AS NAME , 0 AS PHONE, HEIGHT, 0, FROM [TEST_TEMP].
FROM [test_temp].[dbo].[CUSTOMER3] UNION select '-' as name , 0 as phone, height
但结果往往不完整或重复:
TELEPHONE NAME (No column name)
- NULL 0.00
- 0 1.45
- 0 1.50
- 0 1.56
- 0 1.70
- 0 1.74
- 0 1.80
- 0 1.90
- 0 1.96
- 987456321 0.00
欢迎光临
2条答案
按热度按时间azpvetkf1#
如果我理解正确的话,你需要这样的东西:
在这里,
name
列被检查是否重复,如果找到,则替换为-
。对于每个具有此重复规则的列,您需要重复这种情况(将name
更改为相应的列)。mpgws1up2#
假设总是正好有2行具有相同的ID,列可以是
null
:值得注意的是,我们需要转换为
text
(或类似的),以允许其他数据类型的结果中有'-'。IS DISTINCT FROM
也包含null
值。ctid
是Postgres中主键的一个可怜的替代品。请参阅: