2017-05-08 68 views
0

我目前正在尋找有至少一個訂單項目(產品)具有一定的布爾集訂單: - 該產品是一種訂購產品 - 該產品是建立產品選擇不同與父母孩子和返回布爾至少有一個孩子的值?

如果orderlines之一具有這樣值設置爲1,我想在每個DISTINCT訂單ID的查詢中返回此值。

這似乎並不爲我工作:

SELECT DISTINCT [ORDER].[order_id] 
       ,[ORDERLINE].[is_subscription] AS hasSubArticles 
       ,[ORDERLINE].[is_setup] AS hasSetupArticles 
     FROM [ORDER] 
     LEFT JOIN [ORDERLINE] 
     ON [ORDER].[order_id] = [ORDERLINE].[f_order_id] 
     WHERE [G_ORDER].[status] = 1 
     ORDER BY [ORDER].[order_id] 
       ,[ORDERLINE].[is_subscription] AS hasSubArticles 
       ,[ORDERLINE].[is_setup] AS hasSetupArticles 

當我檢查返回的記錄,我收到重複的訂單記錄:

order_id hasSubArticles hasSetupArticles 
---------------------------------------- 
17804 NULL   NULL 
17804 1    0 

我想每個訂單隻返回1記錄ID ,因此這不適合我。

我在做什麼錯?

+0

你沒有過濾掉不認購或設置篇線項目。 –

+0

此外,返回空值的訂單在您加入的表中沒有相關記錄,或者至少在您使用where子句放置的過濾器中有相關記錄。 –

回答

1

Distinct不能滿足您的要求。 MAX,Min功能不允許與bit類型一起使用。你可以使用Group bySUM這樣

SELECT 
    [ORDER].[order_id] 
    ,CASE WHEN SUM(CASE WHEN [ORDERLINE].[is_subscription] = 1 THEN 1 ELSE 0 END) > 0 THEN 1 
      ELSE 0 
    END AS hasSubArticles 
    ,CASE WHEN SUM(CASE WHEN [ORDERLINE].[is_setup] = 1 THEN 1 ELSE 0 END) > 0 
       THEN 1 
      ELSE 0 
    END hasSetupArticles 
FROM [ORDER] 
LEFT JOIN [ORDERLINE] 
ON [ORDER].[order_id] = [ORDERLINE].[f_order_id] 
WHERE [G_ORDER].[status] = 1 
GROUP BY [ORDER].[order_id]