Как получить столбцы из разных несвязанных таблиц с одинаковыми именами столбцов? - PullRequest
2 голосов
/ 29 марта 2019

У меня есть 3 таблицы:

Pay Group:

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

Можем ли мы сделать это?

Ответы [ 2 ]

5 голосов
/ 29 марта 2019

Я подозреваю это дает вам результат, к которому вы стремитесь, но кажется странным требованием:

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;
1 голос
/ 29 марта 2019
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     
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...