我在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
语句,但是我还是不知道。
任何指向具有适合我的答案或答案的问题的链接,都是很好的选择。
答案 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