将sql表转换为其反向

时间:2018-12-11 03:07:31

标签: sql-server tsql

在SQL Server中,下表为StateCity

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

例如,PhiladelphiaPittsburgh属于第一张原始表中的PA。 TrentonAlbany不属于PA,因为它们分别属于NJNY。因此,我想返回前两行中属于PA的两个城市。同样,PhiladelphiaPittsburghAlbany属于NJ以外的州,这就是为什么我返回不属于NJ的城市在输出结果中。最后,我将第一个表中属于纽约的三个城市(PhiladelphiaPittsburghTrenton)分配给输出中的NY结果。

我试图使用游标遍历运营商列表,并使用动态SQL NOT INUNION ALL来完成所需的输出,但无济于事。

2 个答案:

答案 0 :(得分:1)

如果这些是实际数据,则存在异常要求。

无论如何,在同一张桌子上进行SELF CROSS JOININNER 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]