我有一个像这样的桌子-
预期输出为-:
通过此查询,我得到了准确的结果:
select a.city as source,nullif(b.city,a.city) as destination from TABLENAME a,TABLENAME b
但是我不想在查询中使用任何sql函数,所以我尝试了一个-:
select a.city as Source,b.city as Destination
from testq a left join testq b
on a.city<>b.city
使用此查询,我得到-:
我知道我在某个地方犯了一个非常愚蠢的错误,但是我被困在这里,现在却没有得到。如果可以的话请帮帮我。 在此先感谢:)
答案 0 :(得分:1)
就像我在评论中说的那样,除了使用ANSI-92语法外,我看不到查询的任何问题:
SELECT TN1.city AS source,
NULLIF(TN2.city, TN1.city) AS destination
FROM TABLENAME TN1
CROSS JOIN TABLENAME TN2;
如果出于未知原因,您不得使用NULLIF
,您可以做类似这样的事情;但我认为您没有理由这么做:
SELECT TN1.city AS source,
TN2.city AS Destination
FROM TABLENAME TN1
CROSS APPLY (SELECT ca.city
FROM TABLENAME ca
WHERE ca.city != TN1.city
UNION ALL
SELECT NULL) TN2;
答案 1 :(得分:1)
为什么不使用union all
?
select c.city, c2.cty
from cities c join
cities c2
on c.city <> c2.city
union all
select c.city, null
from cities c;
答案 2 :(得分:0)
如果您不想使用任何功能,则CASE子句可能在这里为您工作-
SELECT a.city as source, CASE WHEN a.city = b.city THEN null ELSE b.city as destination
FROM TABLENAME a
CROSS JOIN TABLENAME b