這是在MS SSMS 2016中。我有兩個表--SHIPMENT_HEADER和SHIPMENT_DETAIL。2表 - 當列值發生變化時,從不同表中選擇一行
SHIPMENT_HEADER
shipment_id | customer |
------------|------------|
SH001 | cust1 |
SH002 | cust2 |
Shipment_detail也有類似的列
SHIPMENT_DETAIL
shipment_id | customer | item | requested_qty|
------------|----------|--------|--------------|
SH001 | cust1 | item1 | 2 |
SH001 | cust1 | item2 | 2 |
SH001 | cust1 | item3 | 1 |
SH002 | cust2 | item1 | 2 |
SH002 | cust2 | item2 | 2 |
我不知道是否有可能在所有寫的東西,所以,對於每一個shipment_id,它返回shipment_header細節,與shipment_details下面列出,因此:
shipment_id | instruction |customer | item | requested_qty|
------------|--------------|---------|--------|--------------|
SH001 | HEADER | cust1 | NULL | 5 |
SH001 | DETAIL | cust1 | item1 | 2 |
SH001 | DETAIL | cust1 | item2 | 2 |
SH001 | DETAIL | cust1 | item3 | 1 |
SH002 | HEADER | cust2 | NULL | 4 |
SH002 | DETAIL | cust2 | item1 | 2 |
SH002 | DETAIL | cust2 | item2 | 2 |
我想也許一個UNION選擇標題,然後細節,但如果我查詢多個發貨一次,它選擇所有的頭,那麼所有細節,而不是標題細節,標題細節。
我到目前爲止基本上只是單獨選擇每一位。這是用UNION編寫的,所以如果使用另一種方法,可能不需要一些NULL列。
SELECT
SH.SHIPMENT_ID 'SHIPMENT_ID',
'HEADER' AS 'INSTRUCTION_TYPE',
SH.CUSTOMER 'CUSTOMER',
NULL 'ITEM',
B.TOTAL_QTY
FROM SHIPMENT_HEADER SH
INNER JOIN (
SELECT SHIPMENT_ID, SUM(REQUESTED_QTY) 'TOTAL_QTY'
FROM SHIPMENT_DETAIL
GROUP BY SHIPMENT_ID
) AS B
ON SH.SHIPMENT_ID = B.SHIPMENT_ID
WHERE SH.SHIPMENT_ID IN ('SH001','SH002')
UNION
SELECT
SD.SHIPMENT_ID,
'SHIPMENT_DETAIL' AS 'INSTRUCTION_TYPE',
SD.CUSTOMER,
SD.ITEM,
SD.REQUESTED_QTY
FROM SHIPMENT_DETAIL SD
WHERE SD.SHIPMENT_ID IN (
'SH001', 'SH002'
)
ORDER BY 1, 2
啊哈!謝謝,我通過使用不同的順序,設法得到我需要的。令人尷尬的簡單...非常感謝! – Smeghead