Sql 服务器聚合或数据透视 Table 查询
Sql Server Aggregation or Pivot Table Query
我正在尝试编写一个查询,该查询将告诉我每周进行一定数量交易的客户数量。我不知道从哪里开始查询,但我假设它涉及聚合或数据透视函数。我在 SqlServer 管理工作室工作。
目前的数据是这样的,其中第一列是客户 ID,随后的每一列都是一周:
|Customer| 1 | 2| 3 |4 |
----------------------
|001 |1 | 0| 2 |2 |
|002 |0 | 2| 1 |0 |
|003 |0 | 4| 1 |1 |
|004 |1 | 0| 0 |1 |
我希望看到 return 如下所示:
|Visits |1 | 2| 3 |4 |
----------------------
|0 |2 | 2| 1 |0 |
|1 |2 | 0| 2 |2 |
|2 |0 | 1| 1 |1 |
|4 |0 | 1| 0 |0 |
我想要的是获取每周的客户交易数。例如。在第一周,2 位客户(即 002
和 003
)有 0 笔交易,2 位客户(即 001
和 004
)有 1 笔交易,而零位客户有超过1 笔交易
下面的查询将为您提供所需的结果,但请注意,它对列名进行了硬编码。添加更多周列很容易,但如果列数未知,那么您可能需要使用动态 SQL 来研究解决方案(这需要访问信息模式以获取列名称)。不过把它变成一个完全动态的版本并不难。
select
Visits
, coalesce([1],0) as Week1
, coalesce([2],0) as Week2
, coalesce([3],0) as Week3
, coalesce([4],0) as Week4
from (
select *, count(*) c from (
select '1' W, week1 Visits from t union all
select '2' W, week2 Visits from t union all
select '3' W, week3 Visits from t union all
select '4' W, week4 Visits from t ) a
group by W, Visits
) x pivot ( max (c) for W in ([1], [2], [3], [4]) ) as pvt;
在查询中你的 table 被调用 t
并且输出是:
Visits Week1 Week2 Week3 Week4
0 2 2 1 1
1 2 0 2 2
2 0 1 1 1
4 0 1 0 0
我正在尝试编写一个查询,该查询将告诉我每周进行一定数量交易的客户数量。我不知道从哪里开始查询,但我假设它涉及聚合或数据透视函数。我在 SqlServer 管理工作室工作。
目前的数据是这样的,其中第一列是客户 ID,随后的每一列都是一周:
|Customer| 1 | 2| 3 |4 |
----------------------
|001 |1 | 0| 2 |2 |
|002 |0 | 2| 1 |0 |
|003 |0 | 4| 1 |1 |
|004 |1 | 0| 0 |1 |
我希望看到 return 如下所示:
|Visits |1 | 2| 3 |4 |
----------------------
|0 |2 | 2| 1 |0 |
|1 |2 | 0| 2 |2 |
|2 |0 | 1| 1 |1 |
|4 |0 | 1| 0 |0 |
我想要的是获取每周的客户交易数。例如。在第一周,2 位客户(即 002
和 003
)有 0 笔交易,2 位客户(即 001
和 004
)有 1 笔交易,而零位客户有超过1 笔交易
下面的查询将为您提供所需的结果,但请注意,它对列名进行了硬编码。添加更多周列很容易,但如果列数未知,那么您可能需要使用动态 SQL 来研究解决方案(这需要访问信息模式以获取列名称)。不过把它变成一个完全动态的版本并不难。
select
Visits
, coalesce([1],0) as Week1
, coalesce([2],0) as Week2
, coalesce([3],0) as Week3
, coalesce([4],0) as Week4
from (
select *, count(*) c from (
select '1' W, week1 Visits from t union all
select '2' W, week2 Visits from t union all
select '3' W, week3 Visits from t union all
select '4' W, week4 Visits from t ) a
group by W, Visits
) x pivot ( max (c) for W in ([1], [2], [3], [4]) ) as pvt;
在查询中你的 table 被调用 t
并且输出是:
Visits Week1 Week2 Week3 Week4
0 2 2 1 1
1 2 0 2 2
2 0 1 1 1
4 0 1 0 0