У меня есть 2 таблицы SQL.
IF OBJECT_ID ('A', 'U') IS NOT NULL
BEGIN
DROP TABLE A;
END
GO
CREATE TABLE A
(
[ID] [INT] IDENTITY(1,1) Primary Key NOT NULL,
[Name] [NVARCHAR](80) DEFAULT('Guest'),
[Acct_Num] [NVARCHAR](255)
)
GO
IF OBJECT_ID ('B', 'U') IS NOT NULL
BEGIN
DROP TABLE B;
END
GO
CREATE TABLE B
(
[ID] [INT] IDENTITY(1,1) Primary Key NOT NULL,
[Name] [NVARCHAR](80) DEFAULT('Unk'),
[Acct_Num] [NVARCHAR](255)
)
GO
Добавление в тестовые данные
INSERT INTO [A] ([Name], [Acct_Num]) VALUES ('Test1', '5006347')
INSERT INTO [A] ([Name], [Acct_Num]) VALUES ('Test2', '5006348')
INSERT INTO [A] ([Name], [Acct_Num]) VALUES ('Test3', '5006349')
GO
INSERT INTO [B] ([Name], [Acct_Num]) VALUES ('Attach1', '5006347')
INSERT INTO [B] ([Name], [Acct_Num]) VALUES ('Attach2', '5006347')
GO
Я ищу запрос на возврат A [Name], A [Acct_Num] и B [Имя], где A [Acct_Num] соответствует B [Acct_Num].B [Имя] необходимо добавить к результату в виде прикрепленного столбца. (пример выходных данных приведен ниже)
Теперь моя непосредственная потребность - это всего лишь 2 элемента в таблице B, но что, если это будет 5?
Я попробовал что-то подобноено он не возвращает значения в AS 'имя столбца'.
DECLARE @Row_Cnt Integer = (SELECT COUNT(*) FROM [B] WHERE B.Acct_Num = '5006347')
SELECT A.[Name], A.[Acct_Num],
CASE WHEN @Row_Cnt = '1' THEN
(SELECT MIN(B.[Name]) FROM B WHERE B.Acct_Num = A.Acct_Num)
END AS 'Attach 1',
CASE WHEN @Row_Cnt = '2' THEN
(SELECT MAX(B.[Name]) FROM B WHERE B.Acct_Num = A.Acct_Num)
END AS 'Attach 2'
FROM A WHERE A.Acct_Num = '5006347'
Теперь это работает с использованием MIN & MAX, но при этом было бы невозможно получить все совпадения, если было найдено более 2 элементов.
SELECT A.[Name], A.[Acct_Num], MIN(B.[Name]) AS 'Attach 1', MAX(B.[Name]) AS 'Attach 2'
FROM A
JOIN B ON B.Acct_Num = A.Acct_Num
WHERE A.Acct_Num = '5006347'
GROUP BY A.Name, A.Acct_Num
РЕЗУЛЬТАТ:
Name | Acct_Num | Attach 1 | Attach 2
Test1 | 5006347 | Attach1 | Attach2
И это не очень эффектное (хотя и функциональное) решение для моего квеста с двумя столбцами, но я чувствую, что грядет необходимость в большем количестве возвращаемых столбцов.
Так что же является более эффективным методом, который бы учитывал неизвестное количество возвращаемых предметов.
Спасибо!