Ссылаясь на столбец в первом запросе из второго запроса в T-SQL UNION - PullRequest
0 голосов
/ 02 августа 2011

У меня есть два оператора SELECT, которые являются UNIONed, как в псевдокоде ниже

SELECT A.InvoiceNumber, A.itemCode, A.itemDescription, A.Cost
FROM someTable A
UNION
SELECT InvoiceNumberFromSomeTable, B.itemCode, B.itemDescription, ***IwantTheSumOfAllCostsInTheFirstQueryForThisInvoiceNumber*** as Cost
FROM yetAnotherTable B

Ожидаемый результат:

InvoiceNumber    itemCode         itemDescription                           Cost
I001             A000001          This is Item01 From SomeTable             15
I001             A000002          This is Item02 From SomeTable             16
I001             Total            This is Total From YetAnotherTable        31
I002             A000001          This is Item01 From SomeTable             25
I002             B000002          This is Item99 From SomeTable             26
I002             Total            This is Total From YetAnotherTable        51

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

Как это сделать?Я испробовал каждый подход, с которым я знаком, но не смог заставить его работать.Пожалуйста, помогите и спасибо сообществу SOF.

РЕДАКТИРОВАТЬ: я забыл добавить столбец номера счета.Суммирование должно происходить для каждого счета.Извиняюсь, что не добавил это ранее.

Ответы [ 2 ]

3 голосов
/ 02 августа 2011

То, что вы можете сделать, это SUM в качестве дополнительного столбца

SELECT
    A.itemCode, A.itemDescription, A.Cost,
    SUM(A.Cost) OVER () AS SumCostA
FROM someTable A
UNION
SELECT B.itemCode, B.itemDescription,
    Whatever1, Whatever2 --NULLs?
FROM yetAnotherTable B

Нет особого смысла иметь еще один элемент ItemCode и itemDescription, связанный с данными из другой таблицы. А как насчет стоимости и суммы (стоимости) от elseAnotherTable?

Является ли еще родительская таблица или таблица категорий? Если так, то СОЕДИНЕНИЕ (без СОЮЗА) имело бы больше смысла

Редактировать, после обновления

SELECT
    A.InvoiceNumber, A.itemCode, A.itemDescription, A.Cost,
    SUM(A.Cost) OVER (PARTITION BY A.InvoiceNumber) AS SumCostAPerInvoice
FROM someTable A
UNION
SELECT InvoiceNumberFromSomeTable, B.itemCode, B.itemDescription,
    Whatever1, Whatever2 --NULLs?
FROM yetAnotherTable B
0 голосов
/ 03 августа 2011
SELECT InvoiceNumber, itemCode, itemDescription, Cost 
FROM 
(
    SELECT A.InvoiceNumber, A.itemCode, A.itemDescription, A.Cost, 1 dummy
    FROM someTable A
    UNION
    SELECT A.InvoiceNumber, 'Sub total', B.itemDescription, SUM(A.Cost), 2
    FROM yetAnotherTable B
    JOIN someTabel A ON A.InvoiceNumber = B.InvoiceNumberFromSomeTable
    GROUP BY A.InvoiceNumber, B.itemDescription
) a
ORDER BY InvoiceNumber,dummy

Вы также должны попробовать это. Хотя это не даст вам описание предмета из вашей второй таблицы

http://msdn.microsoft.com/en-us/library/ms177673.aspx

...