除了编写 SQL 查询语句以在同一行中显示单独的列值之外,还有其他方法吗?
Is there an alternative to writing SQL query statement to display separate column value in same row?
我正在导出一个SQL查询语句来准备一个统计报告。在
在我的报告中,我需要在几个单独的列下显示值。这些
column
有不同的数值范围。 (I.e.1, 2-4, 5-10, 11-19, 20-49,
TotalForEachCategory)
。我如何制定我的 SQL
查询来执行相同的操作?
目前,这些值位于不同的行中。
我正在准备 SSRS 报告。为此,我需要开发 SQL
声明。反映在报告中的列在 SQL table 中不是物理列。
因此,我需要派生它们进行 SQL 聚合。举个例子,我
需要为每个类别显示 "Total number of vehicle fleet carriers"
属于不同的舰队范围。
目前我的结果如下。 (不正确)
Fleet Ranges
----------------------------------------------------------------------
| 1 | 2-4 | 5-10 | 11-19 | 20-49 | TotalForCategory
----------------------------------------------------------------------
| 70 | 0 | 0 | 0 | 0 | 70
| 0 | 38 | 0 | 0 | 0 | 38
| 0 | 1 | 0 | 0 | 0 | 1
| 0 | 0 | 27 | 0 | 0 | 27
到目前为止我尝试了什么
SQL查询:
SELECT
(CASE WHEN F.mot_averagefleetsize = 1 THEN COUNT(M.mot_carriernumbername) ELSE 0 END) AS 'Fleet_Range_1',
(CASE WHEN F.mot_averagefleetsize BETWEEN 2 AND 4 THEN COUNT(M.mot_carriernumbername) ELSE 0 END) AS 'Fleet_Range_2-4',
(CASE WHEN F.mot_averagefleetsize BETWEEN 5 AND 10 THEN COUNT(M.mot_carriernumbername) ELSE 0 END) AS 'Fleet_Range_5-10',
(CASE WHEN F.mot_averagefleetsize BETWEEN 11 AND 19 THEN COUNT(M.mot_carriernumbername) ELSE 0 END) AS 'Fleet_Range_11-19',
(CASE WHEN F.mot_averagefleetsize BETWEEN 20 AND 49 THEN COUNT(M.mot_carriernumbername) ELSE 0 END) AS 'Fleet_Range_20-49'
FROM
Table1 F
INNER JOIN
Table2 M ON M.column1 = F.column2
GROUP BY
F.mot_averagefleetsize
我的预期结果应该如下所示:
Fleet Ranges
----------------------------------------------------------------------
| 1 | 2-4 | 5-10 | 11-19 | 20-49 | TotalForCategory
----------------------------------------------------------------------
Category #1| 70 | 39 | 27 | 0 | 0 | 136
|
在派生 Table 聚合后使用 SUM
。您需要指定类别字段
select
categoryfield,
sum (Fleet_Range_1) Fleet_Range_1
sum (Fleet_Range_2-4) Fleet_Range_2-4
sum (Fleet_Range_5-10) Fleet_Range_5-10
sum (Fleet_Range_11-1) Fleet_Range_11-1
sum (Fleet_Range_20-49) Fleet_Range_20-49
from (
select
categoryfield
,(CASE WHEN F.mot_averagefleetsize = 1 THEN COUNT(M.mot_carriernumbername) ELSE 0 END) AS 'Fleet_Range_1'
,(CASE WHEN F.mot_averagefleetsize BETWEEN 2 AND 4 THEN COUNT(M.mot_carriernumbername) ELSE 0 END) AS 'Fleet_Range_2-4'
,(CASE WHEN F.mot_averagefleetsize BETWEEN 5 AND 10 THEN COUNT(M.mot_carriernumbername) ELSE 0 END) AS 'Fleet_Range_5-10'
,(CASE WHEN F.mot_averagefleetsize BETWEEN 11 AND 19 THEN COUNT(M.mot_carriernumbername) ELSE 0 END) AS 'Fleet_Range_11-19'
,(CASE WHEN F.mot_averagefleetsize BETWEEN 20 AND 49 THEN COUNT(M.mot_carriernumbername) ELSE 0 END) AS 'Fleet_Range_20-49'
from Table1 F
inner join Table2 M on M.column1 = F.column2
group by F.mot_averagefleetsize, categoryfield
) x
group by categoryfield
我正在导出一个SQL查询语句来准备一个统计报告。在
在我的报告中,我需要在几个单独的列下显示值。这些
column
有不同的数值范围。 (I.e.1, 2-4, 5-10, 11-19, 20-49,
TotalForEachCategory)
。我如何制定我的 SQL
查询来执行相同的操作?
目前,这些值位于不同的行中。
我正在准备 SSRS 报告。为此,我需要开发 SQL 声明。反映在报告中的列在 SQL table 中不是物理列。 因此,我需要派生它们进行 SQL 聚合。举个例子,我 需要为每个类别显示 "Total number of vehicle fleet carriers" 属于不同的舰队范围。
目前我的结果如下。 (不正确)
Fleet Ranges
----------------------------------------------------------------------
| 1 | 2-4 | 5-10 | 11-19 | 20-49 | TotalForCategory
----------------------------------------------------------------------
| 70 | 0 | 0 | 0 | 0 | 70
| 0 | 38 | 0 | 0 | 0 | 38
| 0 | 1 | 0 | 0 | 0 | 1
| 0 | 0 | 27 | 0 | 0 | 27
到目前为止我尝试了什么
SQL查询:
SELECT
(CASE WHEN F.mot_averagefleetsize = 1 THEN COUNT(M.mot_carriernumbername) ELSE 0 END) AS 'Fleet_Range_1',
(CASE WHEN F.mot_averagefleetsize BETWEEN 2 AND 4 THEN COUNT(M.mot_carriernumbername) ELSE 0 END) AS 'Fleet_Range_2-4',
(CASE WHEN F.mot_averagefleetsize BETWEEN 5 AND 10 THEN COUNT(M.mot_carriernumbername) ELSE 0 END) AS 'Fleet_Range_5-10',
(CASE WHEN F.mot_averagefleetsize BETWEEN 11 AND 19 THEN COUNT(M.mot_carriernumbername) ELSE 0 END) AS 'Fleet_Range_11-19',
(CASE WHEN F.mot_averagefleetsize BETWEEN 20 AND 49 THEN COUNT(M.mot_carriernumbername) ELSE 0 END) AS 'Fleet_Range_20-49'
FROM
Table1 F
INNER JOIN
Table2 M ON M.column1 = F.column2
GROUP BY
F.mot_averagefleetsize
我的预期结果应该如下所示:
Fleet Ranges
----------------------------------------------------------------------
| 1 | 2-4 | 5-10 | 11-19 | 20-49 | TotalForCategory
----------------------------------------------------------------------
Category #1| 70 | 39 | 27 | 0 | 0 | 136
|
在派生 Table 聚合后使用 SUM
。您需要指定类别字段
select
categoryfield,
sum (Fleet_Range_1) Fleet_Range_1
sum (Fleet_Range_2-4) Fleet_Range_2-4
sum (Fleet_Range_5-10) Fleet_Range_5-10
sum (Fleet_Range_11-1) Fleet_Range_11-1
sum (Fleet_Range_20-49) Fleet_Range_20-49
from (
select
categoryfield
,(CASE WHEN F.mot_averagefleetsize = 1 THEN COUNT(M.mot_carriernumbername) ELSE 0 END) AS 'Fleet_Range_1'
,(CASE WHEN F.mot_averagefleetsize BETWEEN 2 AND 4 THEN COUNT(M.mot_carriernumbername) ELSE 0 END) AS 'Fleet_Range_2-4'
,(CASE WHEN F.mot_averagefleetsize BETWEEN 5 AND 10 THEN COUNT(M.mot_carriernumbername) ELSE 0 END) AS 'Fleet_Range_5-10'
,(CASE WHEN F.mot_averagefleetsize BETWEEN 11 AND 19 THEN COUNT(M.mot_carriernumbername) ELSE 0 END) AS 'Fleet_Range_11-19'
,(CASE WHEN F.mot_averagefleetsize BETWEEN 20 AND 49 THEN COUNT(M.mot_carriernumbername) ELSE 0 END) AS 'Fleet_Range_20-49'
from Table1 F
inner join Table2 M on M.column1 = F.column2
group by F.mot_averagefleetsize, categoryfield
) x
group by categoryfield