首页 > 解决方案 > 将表插入主查询表的语法

问题描述

为我(可能)滥用措辞而道歉,但我在编写查询时遇到了一些问题。

本质上,我正在生成一个表,其中每个购物者一行,每个杂货项目一列,我们在其中找到他们购买所述项目的访问百分比。我正在从子查询生成此表,其输出如下所示:

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分组。

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

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 语句适合的位置。

也完全有可能有一种更简单的方法来做到这一点,我也对此持开放态度。任何建议将不胜感激!

标签: sqlsql-server

解决方案


您可能可以使用grouping sets. 在你的group by,改变:

group by shopper

到:

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

此语法.group by


推荐阅读