2016-11-29 4 views
0

Я запросил несколько таблиц и хочу объединить их вместе с 1-м одинаковым столбцом. Вот запросы,SQL Server - Группируйте несколько таблиц

первый запрос

**|Locations|PO Qty|PO NET COST|**  
      |AAA|100|1000| 

второй запрос

**|Locations|Transfer Qty|Transfer COST|** 

|BBB|200|2000| 

третий запрос

**|Locations|Adjusted Qty|Adjusted COST|**  
|CCC|300|3000| 

четвёртый запрос

**|Locations|Sold Qty|Cost of Goods Sold|**  
|DDD|400|4000| 

пятого запрос

**|Locations|Qty on Hand|Cost on Hand|**  
|EEE|500|5000| 

Я хочу группу вроде как ниже формата ...

**|Locations|PO Qty|PO NET COST|Transfer Qty|Transfer Cost|Adjusted Qty|AdjustedCost|Sold Qty|Cost of Goods Sold|Qty on Hand|Cost on Hand|** 

(всего 11 столбцов)

|AAA|100|1000|0|0|0|0|0|0|0|0| 
--- 
|BBB|0|0|200|2000|0|0|0|0|0|0| 
--- 
|CCC|0|0|0|0|300|3000|0|0|0|0| 
--- 
|DDD|0|0|0|0|0|0|400|4000|0|0| 
---- 
|EEE|0|0|0|0|0|0|0|0|500|5000| 

Спасибо! Patrick

+0

Выполняет ** первый запрос **, ** второй запрос ** данные из одной таблицы или другой таблицы? – Viki888

ответ

1

A UNION ALL Оператор даст вам результат, который вам нужен. Следует отметить, что первый запрос, который вы производите, будет определять типы данных и имена столбцов, каждый запрос после этого должен иметь одинаковые столбцы в том же порядке.

В приведенном ниже примере вы заметите, что в любых столбцах, которые не содержат данных, которые я положил в ноль. Вы захотите заменить поля, которые фактически содержат данные с вашими полями из запросов. Оставьте нулевые значения там, где они в противном случае UNION не будут работать.

SELECT 'AAA' AS Locations, 100 AS POQty, 1000 AS PONetCost, 0 AS TransferQuantity, 0 AS TransferCost, 0 AS AdjustedQty, 0 AS AdjustedCost,0 AS SoldQty,0 AS CostofGoodsSold,0 AS QtyOnHand, 0 AS CostOnHand FROM Table1 
UNION ALL 
SELECT 'BBB', 0, 0, 200, 2000, 0, 0, 0, 0, 0, 0 FROM Table2 
UNION ALL 
SELECT 'CCC', 0, 0, 0, 0, 300, 3000, 0, 0, 0, 0 FROM Table3 

Запрос ниже такой же, но я оставил в названиях полей в запросе к югу, так что это немного легче читать. Обратите внимание, что поля все одинаковы и в одном порядке, это важно.

SELECT 
    'AAA' AS Locations, 
    100 AS POQty, 
    1000 AS PONetCost, 
    0 AS TransferQuantity, 
    0 AS TransferCost, 
    0 AS AdjustedQty, 
    0 AS AdjustedCost, 
    0 AS SoldQty, 
    0 AS CostofGoodsSold, 
    0 AS QtyOnHand, 
    0 AS CostOnHand 
FROM Table1 
UNION ALL 
SELECT 
    'BBB' AS Locations, 
    0 AS POQty, 
    0 AS PONetCost, 
    200 AS TransferQuantity, 
    2000 AS TransferCost, 
    0 AS AdjustedQty, 
    0 AS AdjustedCost, 
    0 AS SoldQty, 
    0 AS CostofGoodsSold, 
    0 AS QtyOnHand, 
    0 AS CostOnHand 
FROM Table2 
UNION ALL 
SELECT 
    'CCC' AS Locations, 
    0 AS POQty, 
    0 AS PONetCost, 
    0 AS TransferQuantity, 
    0 AS TransferCost, 
    300 AS AdjustedQty, 
    3000 AS AdjustedCost, 
    0 AS SoldQty, 
    0 AS CostofGoodsSold, 
    0 AS QtyOnHand, 
    0 AS CostOnHand 
FROM Table3 

Извлечение операторов FROM сверху и просто запуск абсолютных значений даст следующий результат;

Locations POQty PONetCost TransferQuantity TransferCost AdjustedQty AdjustedCost SoldQty CostofGoodsSold QtyOnHand CostOnHand 
AAA   100  1000  0     0    0   0    0  0    0   0 
BBB   0  0   200     2000   0   0    0  0    0   0 
CCC   0  0   0     0    300   3000   0  0    0   0 
0

Спасибо для вас быстрый ответ, это не совсем хорошо, если я ставлю 0 во всех областях, которые не имеют данных, потому что будут другие данные о местоположении с другими столбцами и т.д. переноса Кол-во, Кол-во на руке. .. Могу ли я предоставить свои реальные запросы (1-й и 2-й), как показано ниже, для лучшего понимания. Я использую SUM для всех полей данных QTY и COST, потому что мне нужно суммировать общее количество и содержать критерии фильтрации. Кроме того, мне не разрешено использовать UNION ALL между этими двумя запросами SELECT. Он сказал: «Неправильный синтаксис рядом с ключевым словом« UNION ».

`SELECT [код расположения], SUM (Количество) AS "PO Recpt Кол-во" От [БАЗ]. [DBO]. [Компания $ Item Ledger Entry]
где [DATABASE]. [DBO]. [Компании $ Item Ledger Entry] [Number]> 0 AND [Database]. [Dbo]. [Company $ Item Ledger Entry]. [Тип документа] = '5' И [DATABASE]. [Dbo]. [Company $ Item Ledger запись]. [Дата публикации]> '2014-08-01' группа по [Место кодекса] заказа на [Место кодекса]

SELECT [Код расположения], СУММА (Количество) AS «PO QTY (от покупки строка таблицы) ", SUM ([Стоимость единицы (LCY)]) AS" PO Net Cost (HK) "Из [БАЗЫ ДАННЫХ]. [dbo]. [Компания $ Buy Line] Где [БАЗА ДАННЫХ]. [dbo]. [ Компания $ Buy Line]. [Quant итй]> 0 Group по [Место Кодекса] заказа на [Место Кодекса] `

1-ые результаты запроса:

| Расположение Код | PO Recpt Кол-во |

| KOREA | 263 |

| МАРКЕТИНГ | 1425 |

| MOH | 1261 |

| SAMPLE | 1351 |

| WHSDAMAGE | 34 |

| WHSMOH | 19455 |

| WHSMOI | 39276 |

2-я Результаты запроса:

| Расположение Код | PO КОЛ (из таблицы Покупка линии) | ПО Net Стоимость (HK) |

| KOREA | 263 | 16793.64 |

| МАРКЕТИНГ | 577 | 0 |

| ОБРАЗЕЦ | 1351 | 200543.22 |

| WHSDAMAGE | 17 || 2354.76 |

| WHSMOH | 32202 | 980046.99 |

| WHSMOI || 42395 | 986143.32 |

Цель этого комбинированных результатов с помощью UNION ALL

| Расположение Код | PO Recpt Кол-во | ПО КОЛ-ВО (из таблицы Покупка линии) | ПО Net Стоимость (HK) |

| KOREA | 263 | 263 | 16739.64 |

| МАРКЕТИНГ | 1425 | 577 | 0 |

| MOH | 1261 | 0 | 0 |

| ОБРАЗЕЦ | 1351 | 1351 | 200543.22 |

| WHSDAMAGE | 34 | 17 | 2354.76 |

| WHSMOH | 19455 | 32203 | 980046.99 |

| WHSMOI | 39276 | 42395 | 986143.32 |

Смежные вопросы