Объединить поля из объединенных таблиц - PullRequest
1 голос
/ 29 мая 2009

В одной категории может быть много товаров. Я должен построить StoredProcedure, который возвращает все категории с некоторыми данными из Продуктов, объединенными в одно поле:

SP Result:
idCategory Name   ProductNames         ProductQuantities 
1          Cat1   Procut1,Product2     24,32
2          Cat2   ProductX,ProductY    0,61

ProductNames и ProductQuantities - поля varchar с объединенными (объединенными) значениями полей из объединенных таблиц Product. Вот что у меня в БД:

Category table:
idCategory   Name
1            Cat1
2            Cat2

Product table:
idProduct  idCategory Name      Quantity 
1          1          Product1  24
2          1          Product2  32
3          2          ProductX  0
4          2          ProductY  61 

Я также хотел бы иметь функцию, которая возвращает «Product1, Product2» для входного параметра idCategory = 1, например:

SELECT idCategory, 
       dbo.NamesFn(idCategory) AS ProductNames,
       dbo.QuantitiesFn(idCategory) AS ProductQuantities 
FROM Category

может быть, одна функция, которая возвращает Table Result, поэтому объединение будет выполнено только один раз, а не в каждой Fn (потому что это упрощенный пример, в реальном приложении у меня должно быть 4-5 комбинированных полей, или даже больше в будущем)

Как написать этот SQL / SP & Fn? Я использую MS SQL2005

1 Ответ

2 голосов
/ 29 мая 2009

Существует несколько решений для объединения строк с использованием SQL Server. См. это и это .

Этот запрос производит набор результатов, который вы просили:

select c.idCategory, c.Name,
    replace(
        (select p.Name as [data()]
         from Product p
     where p.idCategory = c.idCategory
     for xml path ('')
), ' ', ', ') as ProductNames,
    replace(
        (select p.Quantity as [data()]
         from Product p
     where p.idCategory = c.idCategory
     for xml path ('')
), ' ', ', ') as ProductQuantities 
from Category c

Отредактировано, чтобы добавить: Этот запрос дает результат:

idCategory  Name    ProductNames          ProductQuantities
1           Cat1    Product1, Product2    24, 32
2           Cat2    ProductX, ProductY    0, 61
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...