Sql 如何从具有相似列名的不同不相关表中获取列?

Sql 如何从具有相似列名的不同不相关表中获取列?,sql,sql-server,Sql,Sql Server,我有三张桌子: 薪资组: PayGroupId Name Description Code 1 US Weekly US Weekly USW 2 Can Weekly Canada Weekly CANW 3 US Monthly US Monthly USM 4 Can Monthly Can Monthly CANM 薪酬类型: PayTypeId

我有三张桌子:

薪资组:

PayGroupId   Name       Description    Code
1            US Weekly  US Weekly      USW
2            Can Weekly Canada Weekly  CANW
3            US Monthly US Monthly     USM
4            Can Monthly Can Monthly   CANM
薪酬类型:

PayTypeId   Name       Description    Code
1           Hourly     Hourly         H
2           Salary     Salaried       S
支付代码:

PayCodeId   Name       Description    Code
1           Regular    Regular        REG
2           PTO        PTO            PTO
3           Sick       Sick           SICK
我需要以下格式的报告:

PayGroup    PayType    PayCode
US Weekly   Hourly     Regular
Can Weekly  Salary     PTO        
US Monthly             Sick
我们可以这样做吗?

我怀疑这会让你得到你想要的结果,但这似乎是一个奇怪的要求:

WITH PG AS(
    SELECT [Name],
           ROW_NUMBER() OVER (ORDER BY PayGroupID ASC) AS RN
    FROM PayGroup),
PT AS(
    SELECT [Name],
           ROW_NUMBER() OVER (ORDER BY PayTypeID ASC) AS RN
    FROM PayGroup),
PC AS(
    SELECT [Name],
           ROW_NUMBER() OVER (ORDER BY PayCodeID ASC) AS RN
    FROM PayCode)
SELECT PG.[Name] AS PayGroup,
       PT.[Name] AS PayType,
       PC.[Name] AS PayCode
FROM PG
     FULL OUTER JOIN PT ON PG.RN = PT.RN
     FULL OUTER JOIN PC ON PG.RN = PC.RN
                        OR PT.RN = PC.RN;

一个简单的问题。。。。如果表的主键以不同的数字开头怎么办?例如,对于支付代码,支付代码ID以100开头,而对于支付类型,支付类型ID以28开头?@user1326379您似乎不明白答案。您了解
行号
的作用吗?
CREATE TABLE #table1
    ([PayGroupId] int, [Name] varchar(11), [Description] varchar(13), [Code] varchar(4))
;

INSERT INTO #table1
    ([PayGroupId], [Name], [Description], [Code])
VALUES
    (1, 'US Weekly', 'US Weekly', 'USW'),
    (2, 'Can Weekly', 'Canada Weekly', 'CANW'),
    (3, 'US Monthly', 'US Monthly', 'USM'),
    (4, 'Can Monthly', 'Can Monthly', 'CANM')
;


CREATE TABLE #table2
    ([PayTypeId] int, [Name] varchar(6), [Description] varchar(8), [Code] varchar(1))
;

INSERT INTO #table2
    ([PayTypeId], [Name], [Description], [Code])
VALUES
    (1, 'Hourly', 'Hourly', 'H'),
    (2, 'Salary', 'Salaried', 'S')
;




CREATE TABLE #table3
    ([PayCodeId] int, [Name] varchar(7), [Description] varchar(7), [Code] varchar(4))
;

INSERT INTO #table3
    ([PayCodeId], [Name], [Description], [Code])
VALUES
    (1, 'Regular', 'Regular', 'REG'),
    (2, 'PTO', 'PTO', 'PTO'),
    (3, 'Sick', 'Sick', 'SICK')
;
select a.name PayGroup ,isnull(B.Name,'') PayType ,isnull(C.Name,'')PayCode
 from #table1 A left join #table2 B on a.[PayGroupId]=b.[PayTypeId]left join
 #table3 c on c.[PayCodeId]=a.[PayGroupId]


PayGroup    PayType PayCode
US Weekly   Hourly  Regular
Can Weekly  Salary  PTO
US Monthly          Sick
Can Monthly