仅当列的值为空时才按分组依据

时间:2018-07-14 17:45:09

标签: sql-server group-by

我在View中有一个SQL,其中显示了订单和该订单上的产品,以及已分配产品的列表。如果产品尚未分配到列表中,但要显示已单独分配的产品,我要尝试使用Group By

例如,我的View如下所示:

+---------+--------------+-------------+
| fkOrder | fkProductID  |  fkListID   |
+---------+--------------+-------------+
|   1     |     10       |    NULL     |
|   1     |     10       |    NULL     |
|   1     |     10       |    NULL     |
|   1     |     10       |     1       |
|   1     |     10       |     1       |
|   2     |     20       |    NULL     |
|   2     |     20       |    NULL     |
|   2     |     20       |    NULL     |
|   2     |     20       |    NULL     |
|   2     |     20       |     1       |
+---------+--------------+-------------+

但是我希望它看起来像这样:

+---------+--------------+-------------+
| fkOrder | fkProductID  |  fkListID   |
+---------+--------------+-------------+
|   1     |     10       |    NULL     |
|   1     |     10       |     1       |
|   1     |     10       |     1       |
|   2     |     20       |    NULL     |
|   2     |     20       |     1       |
+---------+--------------+-------------+

目前,我已经可以使用Group By来获得此结果:

+---------+--------------+-------------+
| fkOrder | fkProductID  |  fkListID   |
+---------+--------------+-------------+
|   1     |     10       |    NULL     |
|   1     |     10       |     1       |
|   2     |     20       |    NULL     |
|   2     |     20       |     1       |
+---------+--------------+-------------+

我一直在浏览与我类似的问题,但我仍然找不到适合我的答案。我知道我可能已经读了一个可能是我需要的答案,但是由于我对SQL的经验不足,我不知道。所以我想我只是问问自己。

我尝试从Group By列中删除fkListID,但收到错误消息:'fkListID' is invalid in the select list because it is not contained in either an aggregate function or the Group By clause,所以我尝试了下拉菜单中提供的所有其他选项,除了{{1 }},但无法获得理想的结果。

相反,我觉得它位于Group By的某处,但始终会出现语法错误。

或者在列上使用Group By WHERE fkListID IS NULL语句,但是我还是不知道。

任何指向具有适合我的答案或答案的问题的链接,都是很好的选择。

1 个答案:

答案 0 :(得分:2)

如前所述,您的数据没有主键。您可以使用union all

select fkOrder, fkProductID, fkListID
from myview
where fkListID is not null
union all
select distinct fkOrder, fkProductID, fkListID
from myview
where fkListID is null