将表插入主查询表的语法

时间:2019-07-19 15:50:03

标签: sql sql-server

为我(可能)滥用措词表示歉意,但我在编写查询时遇到一些麻烦。

基本上,我正在生成一个表格,每个购物者一行,每一个杂货一行,在其中我们可以找到他们的访问次数的百分比他们购买了 item 。我正在从子查询生成该表,其输出看起来像:

Shopper | Visit | Butter | Milk | Eggs
Bill    |   A   |   1    |   0  |  1
Bill    |   B   |   0    |   1  |  1
John    |   C   |   0    |   1  |  0
John    |   D   |   1    |   1  |  1

这样,我的主查询显示以下内容:

Shopper | Butter % | Milk % | Eggs %
Bill    |    50%   |   50%  |  100%
John    |    50%   |   100% |   50%

我实质上是将标记的总和除以总访问次数,再按购物者分组。

但是,我想在底部添加一行以显示所有购物者的百分比,这样我的最终表格将是:

Shopper | Butter % | Milk % | Eggs %
Bill    |    50%   |   50%  |  100%
John    |    50%   |   100% |   50%
All     |    50%   |   75%  |   75%

我最初的想法是为此创建一个单独的子查询,其中我模仿了获取百分比的逻辑(但是将“分组依据”留空以获取所有购物者的百分比)。我在将行附加到最终表的底部时遇到了一些麻烦。

我确实找到了INSERT语句,并且知道有几种不同的方法可以包含它,但是我不确定在主查询的上下文中该语法是什么样的。

也许有一种更直接的解释方式,但是如果我的一般格式是

WITH <Subquery creation>,
     <Subquery 2 creation>
SELECT <create percent columns>
FROM <Subquery table>
WHERE ...
GROUP BY ...

我在弄清楚这样的INSERT语句适合的位置时遇到了麻烦。

这完全有可能做到这一点,我也乐意接受。任何建议将不胜感激!

2 个答案:

答案 0 :(得分:1)

您可能可以使用grouping sets。在您的group by中,更改:

group by shopper

收件人:

group by grouping sets ( (shopper), () )

group by的{​​{3}}中对此语法进行了说明。

答案 1 :(得分:1)

另一种选择是UNION您的结果集,因为您有两个有效的查询。您可以在CTE之间加上逗号。

WITH
  Subquery1 AS
  <logic>
, Subquery2 AS
  <logic>
SELECT * FROM Subquery1
UNION
SELECT * FROM Subquery2;
相关问题