在SQL Server中,下表为State
和City
:
CREATE TABLE #State_City
(
State VARCHAR(100),
City VARCHAR(100)
)
INSERT INTO #State_City (State, City)
VALUES ('PA', 'Philadelphia'),
('PA', 'Pittsburgh'),
('NJ', 'Trenton'),
('NY', 'Albany')
State City
----------------------
PA Philadelphia
PA Pittsburgh
NJ Trenton
NY Albany
我想将其转换为以下输出,对于每个State
,我想返回属于不同Cities
(当前行中的那个除外)的States
原始表。
State City
----------------------
PA Trenton
PA Albany
NJ Philadelphia
NJ Pittsburgh
NJ Albany
NY Philadelphia
NY Pittsburgh
NY Trenton
例如,Philadelphia
和Pittsburgh
属于第一张原始表中的PA。 Trenton
和Albany
不属于PA
,因为它们分别属于NJ
和NY
。因此,我想返回前两行中不属于PA
的两个城市。同样,Philadelphia
,Pittsburgh
和Albany
属于NJ
以外的州,这就是为什么我返回不不属于NJ的城市在输出结果中。最后,我将第一个表中不属于纽约的三个城市(Philadelphia
,Pittsburgh
和Trenton
)分配给输出中的NY结果。
我试图使用游标遍历运营商列表,并使用动态SQL NOT IN
和UNION ALL
来完成所需的输出,但无济于事。
答案 0 :(得分:1)
如果这些是实际数据,则存在异常要求。
无论如何,在同一张桌子上进行SELF
CROSS JOIN
或INNER JOIN
并检查State
不匹配
SELECT DISTINCT sc1.State, sc2.City
FROM #State_City sc1
INNER JOIN #State_City sc2 on sc1.State <> sc2.State
ORDER BY sc1.State, sc2.City
答案 1 :(得分:1)
SELECT DISTINCT
SC2.[State],
SC1.City
FROM
#State_City AS SC1
INNER JOIN
#State_City AS SC2 ON SC1.[State] <> SC2.[State]