2016-10-24 45 views
0

我有這方面的信息。如何在SQL中創建此輸出

表OrderTotals

Order Value 
A   10 
B   20 
C   15 

表ORDERDETAILS

Order Line Description 
A  11 Red 
B  24 Blue 
B  25 Green 
B  28 Yellow 
C  17 Green 

而且我想這個輸出

Order Line Description Value 
A  11 Red   10 
B  24 Blue  20 
B  25 Green 
B  28 Yellow 
C  17 Green  15 

這可能嗎?如果是,如何?

+1

這聽起來像是你應該嘗試你的SQL Server之外解決問題。您想要使用訂單總額來描繪訂單行詳細信息,但僅限於所述詳細信息的第一條記錄。除了非常奇怪的設計外,對我來說沒什麼意義。要回答你的問題,這當然是可以的。如果你使用'ROW_NUMBER()'在你的'Line'上排序並且使用'CASE WHEN',如果它是1,那麼只需使用你會到達的子查詢來選擇訂單總數。 – Jens

回答

3

你似乎想left join

select od.*, 
     (case when row_number() over (partition by od.[order] order by line) = 1 
      then ot.value 
     end) as value 
from orderdetails od left join 
    ordertotals ot 
    on od.[order] = ot.[order] 
order by od.[order], od.line; 

我不知道你爲什麼會想value上只有一條線,但是這應該達到這個目標。

+0

謝謝,這是我想要的! – PSVSupporter

0

請嘗試以下查詢。

  select 
      od.Order, 
      od.Line , 
      od.Description, 
      ot.Value 

      from 
      OrderTotals OT 
      join Orderdetails OD on OT.order=od.order 

,如果您有任何疑問,請讓我們知道

0

您可以按以下:

SELECT 
    * 
FROM  
    Orderdetails X LEFT JOIN 
    (
     SELECT 
      * 
     FROM 
      OrderTotals A INNER JOIN 
      (SELECT OD.Order, MIN(OD.Line) MinLine FROM Orderdetails OD GROUP BY OD.Order) B ON A.Order = B.Order 

    ) Y ON X.Order = Y.Order AND X.Line = Y.MinLine 
1

試試這個

SELECT A.[Order], 
     CASE 
     WHEN Row_number() 
       OVER(
        PARTITION BY A.[ORDER] 
        ORDER BY A.[ORDER]) = 1 THEN VALUE 
     ELSE NULL 
     END AS VALUE, 
     B.[Line Description] 
FROM TABLE1 A 
     LEFT JOIN Table2 B 
       ON A.[Order] = B.[Order]