我有以下SQL语句:
SELECT
row1 AS row1str,
SUM(row2),
SUM(row3),
SUM(row4)
FROM
table1
GROUP BY
row1
UNION
SELECT
'Total',
SUM(row2),
SUM(row3),
SUM(row4),
FROM
table1
ORDER BY
CASE row1 WHEN 'Total' THEN 1 ELSE 0 END, row1;
返回每行中唯一值的总和,包括另一行,其中包含每列值的总和。我添加了一个ORDER BY子句,因为row1包含以字母“u”开头的单词。
现在的问题是我无法将“总计”行移到底部我的结果因为运行查询会给我这个错误:
如果语句,ORDER BY项必须出现在选择列表中 包含UNION,INTERSECT或EXCEPT运算符。
这对我来说很有意义,因为我的第二个SELECT语句不包含row1(我不确定我对这个错误的理解是否100%正确)。但是,将ORDER BY子句移动到第一个SELECT语句肯定会返回错误:
关键字“UNION”附近的语法不正确。
我也试过给row1一个别名并尝试引用它,但没有成功。
所以我的问题是,如何将包含值'Total'的行移动到我的SQL查询结果的底部?
答案 0 :(得分:0)
Use Temp table,First insert sum values and finally insert total.
CREATE TABLE #table1(row1 INT,row2 INT,row3 INT,row4 INT)
INSERT INTO #table1(row1 ,row2 ,row3 ,row4)
SELECT row1 AS row1str,SUM(row2),SUM(row3),SUM(row4)
FROM table1
GROUP BY row1
INSERT INTO #table1(row1 ,row2 ,row3 ,row4)
SELECT 'Total',SUM(row2),SUM(row3),SUM(row4),
FROM table1
SELECT * FROM #table1
答案 1 :(得分:0)
您可以尝试以下内容并查看。
SELECT *
FROM
(SELECT row1 AS row1str,
SUM(row2),
SUM(row3),
SUM(row4)
FROM table1
GROUP BY row1
UNION
SELECT 'Total',
SUM(row2),
SUM(row3),
SUM(row4)
FROM table1
)
ORDER BY row1str DESC;