2017-05-08 66 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]