SQL Recursive Coalesce - PullRequest
       3

SQL Recursive Coalesce

1 голос
/ 13 января 2010

Я пытаюсь создать столбец, который содержит все города по ссылочным адресам.

DECLARE @AddressList nvarchar(max)
SELECT @AddressList = COALESCE(@AddressList + ' ', '') + City  FROM [Address]

SELECT
    Employee.*, 
    (SELECT @AddressList) AS AddressCities
FROM Employee

Но я не знаю, куда поместить предложение WHERE.

...
    (SELECT @AddressList WHERE EmployeeId = Employee.EmployeeId) AS AddressCities
...

Приведенный выше тест не работает ..

Схемы таблиц:

Employee
EmployeeID
Имя

Адрес
Улица
Город
EmployeeID

Ответы [ 2 ]

1 голос
/ 13 января 2010

Если я вас правильно понимаю, вы хотите показать все Города в одном столбце для сотрудника. Итак, вы хотите GROUP BY и CONCAT .

Используя Sql Server 2005, попробуйте это (рабочий пример)

DECLARE @Employee TABLE(
        EmployeeId INT,
        NAME VARCHAR(100)
)

INSERT INTO @Employee (EmployeeId,[NAME]) SELECT 1, 'A'
INSERT INTO @Employee (EmployeeId,[NAME]) SELECT 2, 'B'

DECLARE @Address TABLE(
        Street VARCHAR(50),
        City VARCHAR(50),
        EmployeeId INT
)

INSERT INTO @Address (Street,City, EmployeeId) SELECT 'A','A', 1
INSERT INTO @Address (Street,City, EmployeeId) SELECT 'B','B', 1
INSERT INTO @Address (Street,City, EmployeeId) SELECT 'C','C', 1
INSERT INTO @Address (Street,City, EmployeeId) SELECT 'D','D', 2
INSERT INTO @Address (Street,City, EmployeeId) SELECT 'E','E', 2
INSERT INTO @Address (Street,City, EmployeeId) SELECT 'F','F', 2


SELECT  e.EmployeeId,
        e.[NAME],
        (
            SELECT  al.City + ','
            FROM    @Address al
            WHERE   al.EmployeeId = e.EmployeeId
            FOR XML PATH('')
        )
FROM    @Employee e
GROUP BY e.EmployeeId,
        e.[NAME]
0 голосов
/ 13 января 2010

Вам нужна дополнительная информация о том, что вы подразумеваете под «столбцом, содержащим все города». Чем то, что вы хотите, отличается от следующего, может помочь вам сформулировать вопрос

SELECT e.EmployeeId,e.Name,a.City
FROM Employee e
INNER JOIN Address a ON a.EmployeeId = e.EmployeeId
GROUP BY e.EmployeeId,e.Name

- обновить

Я думаю, я понимаю, что вы имеете в виду, вы хотите, как:

EmployeeID | Name | Address
1          | John | 'London','Paris','Rome'
2          | Jane | 'New York','Miami'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...