从MySQL报告中排除临时列
我正在寻找一种方法,将用作排序键的列从报告中显示出来。在Oracle中,我可以简单地说是从MySQL报告中排除临时列,mysql,sql,Mysql,Sql,我正在寻找一种方法,将用作排序键的列从报告中显示出来。在Oracle中,我可以简单地说是列SORTKEY NOPRINT,但在MySQL中,我还没有找到一个等价的。据我所知,我需要排序键,以便按正确的顺序显示行(借记、贷记,然后合计) 我正在处理的查询如下(非常大): SQL SELECT CASE WHEN t.transaction_account = '111-111-111-111' THEN 'Debit' WHEN t.transaction_a
列SORTKEY NOPRINT
,但在MySQL中,我还没有找到一个等价的。据我所知,我需要排序键,以便按正确的顺序显示行(借记、贷记,然后合计)
我正在处理的查询如下(非常大):
SQL
SELECT CASE
WHEN t.transaction_account = '111-111-111-111' THEN 'Debit'
WHEN t.transaction_account = '222-222-222-222' THEN 'Credit'
END AS "Transaction",
CASE
WHEN t.transaction_account = '111-111-111-111' THEN 1
WHEN t.transaction_account = '222-222-222-222' THEN 2
END AS "SORTKEY",
LPAD(FORMAT(SUM(
CASE
WHEN EXTRACT(MONTH FROM transaction_date) = 1 AND
EXTRACT(YEAR FROM transaction_date) = 2009
THEN
CASE
WHEN cl.common_lookup_type = 'DEBIT'
THEN t.transaction_amount
ELSE t.transaction_amount * -1
END
END), 2),10,' ') AS "Jan",
LPAD(FORMAT(SUM(
CASE
WHEN EXTRACT(MONTH FROM transaction_date) = 2 AND
EXTRACT(YEAR FROM transaction_date) = 2009
THEN
CASE
WHEN cl.common_lookup_type = 'DEBIT'
THEN t.transaction_amount
ELSE t.transaction_amount * -1
END
END), 2),10,' ') AS "Feb",
LPAD(FORMAT(SUM(
CASE
WHEN EXTRACT(MONTH FROM transaction_date) = 3 AND
EXTRACT(YEAR FROM transaction_date) = 2009
THEN
CASE
WHEN cl.common_lookup_type = 'DEBIT'
THEN t.transaction_amount
ELSE t.transaction_amount * -1
END
END), 2),10,' ') AS "Mar",
LPAD(FORMAT(SUM(
CASE
WHEN EXTRACT(MONTH FROM transaction_date) IN ('1','2','3') AND
EXTRACT(YEAR FROM transaction_date) = 2009
THEN
CASE
WHEN cl.common_lookup_type = 'DEBIT'
THEN t.transaction_amount
ELSE t.transaction_amount * -1
END
END), 2),10,' ') AS "FQ1",
LPAD(FORMAT(SUM(
CASE
WHEN EXTRACT(MONTH FROM transaction_date) = 4 AND
EXTRACT(YEAR FROM transaction_date) = 2009
THEN
CASE
WHEN cl.common_lookup_type = 'DEBIT'
THEN t.transaction_amount
ELSE t.transaction_amount * -1
END
END), 2),10,' ') AS "Apr",
LPAD(FORMAT(SUM(
CASE
WHEN EXTRACT(MONTH FROM transaction_date) = 5 AND
EXTRACT(YEAR FROM transaction_date) = 2009
THEN
CASE
WHEN cl.common_lookup_type = 'DEBIT'
THEN t.transaction_amount
ELSE t.transaction_amount * -1
END
END), 2),10,' ') AS "May",
LPAD(FORMAT(SUM(
CASE
WHEN EXTRACT(MONTH FROM transaction_date) = 6 AND
EXTRACT(YEAR FROM transaction_date) = 2009
THEN
CASE
WHEN cl.common_lookup_type = 'DEBIT'
THEN t.transaction_amount
ELSE t.transaction_amount * -1
END
END), 2),10,' ') AS "Jun",
LPAD(FORMAT(SUM(
CASE
WHEN EXTRACT(MONTH FROM transaction_date) IN ('4','5','6') AND
EXTRACT(YEAR FROM transaction_date) = 2009
THEN
CASE
WHEN cl.common_lookup_type = 'DEBIT'
THEN t.transaction_amount
ELSE t.transaction_amount * -1
END
END), 2),10,' ') AS "FQ2",
LPAD(FORMAT(SUM(
CASE
WHEN EXTRACT(MONTH FROM transaction_date) = 7 AND
EXTRACT(YEAR FROM transaction_date) = 2009
THEN
CASE
WHEN cl.common_lookup_type = 'DEBIT'
THEN t.transaction_amount
ELSE t.transaction_amount * -1
END
END), 2),10,' ') AS "Jul",
LPAD(FORMAT(SUM(
CASE
WHEN EXTRACT(MONTH FROM transaction_date) = 8 AND
EXTRACT(YEAR FROM transaction_date) = 2009
THEN
CASE
WHEN cl.common_lookup_type = 'DEBIT'
THEN t.transaction_amount
ELSE t.transaction_amount * -1
END
END), 2),10,' ') AS "Aug",
LPAD(FORMAT(SUM(
CASE
WHEN EXTRACT(MONTH FROM transaction_date) = 9 AND
EXTRACT(YEAR FROM transaction_date) = 2009
THEN
CASE
WHEN cl.common_lookup_type = 'DEBIT'
THEN t.transaction_amount
ELSE t.transaction_amount * -1
END
END), 2),10,' ') AS "Sep",
LPAD(FORMAT(SUM(
CASE
WHEN EXTRACT(MONTH FROM transaction_date) IN ('7','8','9') AND
EXTRACT(YEAR FROM transaction_date) = 2009
THEN
CASE
WHEN cl.common_lookup_type = 'DEBIT'
THEN t.transaction_amount
ELSE t.transaction_amount * -1
END
END), 2),10,' ') AS "FQ3",
LPAD(FORMAT(SUM(
CASE
WHEN EXTRACT(MONTH FROM transaction_date) = 10 AND
EXTRACT(YEAR FROM transaction_date) = 2009
THEN
CASE
WHEN cl.common_lookup_type = 'DEBIT'
THEN t.transaction_amount
ELSE t.transaction_amount * -1
END
END), 2),10,' ') AS "Oct",
LPAD(FORMAT(SUM(
CASE
WHEN EXTRACT(MONTH FROM transaction_date) = 11 AND
EXTRACT(YEAR FROM transaction_date) = 2009
THEN
CASE
WHEN cl.common_lookup_type = 'DEBIT'
THEN t.transaction_amount
ELSE t.transaction_amount * -1
END
END), 2),10,' ') AS "Nov",
LPAD(FORMAT(SUM(
CASE
WHEN EXTRACT(MONTH FROM transaction_date) = 12 AND
EXTRACT(YEAR FROM transaction_date) = 2009
THEN
CASE
WHEN cl.common_lookup_type = 'DEBIT'
THEN t.transaction_amount
ELSE t.transaction_amount * -1
END
END), 2),10,' ') AS "Dec",
LPAD(FORMAT(SUM(
CASE
WHEN EXTRACT(MONTH FROM transaction_date) IN ('10','11','12') AND
EXTRACT(YEAR FROM transaction_date) = 2009
THEN
CASE
WHEN cl.common_lookup_type = 'DEBIT'
THEN t.transaction_amount
ELSE t.transaction_amount * -1
END
END), 2),10,' ') AS "FQ4",
LPAD(FORMAT(SUM(
CASE
WHEN EXTRACT(YEAR FROM transaction_date) = 2009
THEN
CASE
WHEN cl.common_lookup_type = 'DEBIT'
THEN t.transaction_amount
ELSE t.transaction_amount * -1
END
END), 2),10,' ') AS "YTD"
FROM transaction t INNER JOIN common_lookup cl
ON t.transaction_type = cl.common_lookup_id
WHERE cl.common_lookup_table = 'TRANSACTION'
AND cl.common_lookup_column = 'TRANSACTION_TYPE'
GROUP BY CASE
WHEN t.transaction_account = '111-111-111-111' THEN 'Debit'
WHEN t.transaction_account = '222-222-222-222' THEN 'Credit'
END
, CASE
WHEN t.transaction_account = '111-111-111-111' THEN 1
WHEN t.transaction_account = '222-222-222-222' THEN 2
END
UNION ALL
SELECT 'Total' AS "Transaction",
3 AS "SORTKEY",
LPAD(FORMAT(SUM(
CASE
WHEN EXTRACT(MONTH FROM transaction_date) = 1 AND
EXTRACT(YEAR FROM transaction_date) = 2009
THEN
CASE
WHEN cl.common_lookup_type = 'DEBIT'
THEN t.transaction_amount
ELSE t.transaction_amount * -1
END
END), 2),10,' ') AS "Jan",
LPAD(FORMAT(SUM(
CASE
WHEN EXTRACT(MONTH FROM transaction_date) = 2 AND
EXTRACT(YEAR FROM transaction_date) = 2009
THEN
CASE
WHEN cl.common_lookup_type = 'DEBIT'
THEN t.transaction_amount
ELSE t.transaction_amount * -1
END
END), 2),10,' ') AS "Feb",
LPAD(FORMAT(SUM(
CASE
WHEN EXTRACT(MONTH FROM transaction_date) = 3 AND
EXTRACT(YEAR FROM transaction_date) = 2009
THEN
CASE
WHEN cl.common_lookup_type = 'DEBIT'
THEN t.transaction_amount
ELSE t.transaction_amount * -1
END
END), 2),10,' ') AS "Mar",
LPAD(FORMAT(SUM(
CASE
WHEN EXTRACT(MONTH FROM transaction_date) IN ('1','2','3') AND
EXTRACT(YEAR FROM transaction_date) = 2009
THEN
CASE
WHEN cl.common_lookup_type = 'DEBIT'
THEN t.transaction_amount
ELSE t.transaction_amount * -1
END
END), 2),10,' ') AS "FQ1",
LPAD(FORMAT(SUM(
CASE
WHEN EXTRACT(MONTH FROM transaction_date) = 4 AND
EXTRACT(YEAR FROM transaction_date) = 2009
THEN
CASE
WHEN cl.common_lookup_type = 'DEBIT'
THEN t.transaction_amount
ELSE t.transaction_amount * -1
END
END), 2),10,' ') AS "Apr",
LPAD(FORMAT(SUM(
CASE
WHEN EXTRACT(MONTH FROM transaction_date) = 5 AND
EXTRACT(YEAR FROM transaction_date) = 2009
THEN
CASE
WHEN cl.common_lookup_type = 'DEBIT'
THEN t.transaction_amount
ELSE t.transaction_amount * -1
END
END), 2),10,' ') AS "May",
LPAD(FORMAT(SUM(
CASE
WHEN EXTRACT(MONTH FROM transaction_date) = 6 AND
EXTRACT(YEAR FROM transaction_date) = 2009
THEN
CASE
WHEN cl.common_lookup_type = 'DEBIT'
THEN t.transaction_amount
ELSE t.transaction_amount * -1
END
END), 2),10,' ') AS "Jun",
LPAD(FORMAT(SUM(
CASE
WHEN EXTRACT(MONTH FROM transaction_date) IN ('4','5','6') AND
EXTRACT(YEAR FROM transaction_date) = 2009
THEN
CASE
WHEN cl.common_lookup_type = 'DEBIT'
THEN t.transaction_amount
ELSE t.transaction_amount * -1
END
END), 2),10,' ') AS "FQ2",
LPAD(FORMAT(SUM(
CASE
WHEN EXTRACT(MONTH FROM transaction_date) = 7 AND
EXTRACT(YEAR FROM transaction_date) = 2009
THEN
CASE
WHEN cl.common_lookup_type = 'DEBIT'
THEN t.transaction_amount
ELSE t.transaction_amount * -1
END
END), 2),10,' ') AS "Jul",
LPAD(FORMAT(SUM(
CASE
WHEN EXTRACT(MONTH FROM transaction_date) = 8 AND
EXTRACT(YEAR FROM transaction_date) = 2009
THEN
CASE
WHEN cl.common_lookup_type = 'DEBIT'
THEN t.transaction_amount
ELSE t.transaction_amount * -1
END
END), 2),10,' ') AS "Aug",
LPAD(FORMAT(SUM(
CASE
WHEN EXTRACT(MONTH FROM transaction_date) = 9 AND
EXTRACT(YEAR FROM transaction_date) = 2009
THEN
CASE
WHEN cl.common_lookup_type = 'DEBIT'
THEN t.transaction_amount
ELSE t.transaction_amount * -1
END
END), 2),10,' ') AS "Sep",
LPAD(FORMAT(SUM(
CASE
WHEN EXTRACT(MONTH FROM transaction_date) IN ('7','8','9') AND
EXTRACT(YEAR FROM transaction_date) = 2009
THEN
CASE
WHEN cl.common_lookup_type = 'DEBIT'
THEN t.transaction_amount
ELSE t.transaction_amount * -1
END
END), 2),10,' ') AS "FQ3",
LPAD(FORMAT(SUM(
CASE
WHEN EXTRACT(MONTH FROM transaction_date) = 10 AND
EXTRACT(YEAR FROM transaction_date) = 2009
THEN
CASE
WHEN cl.common_lookup_type = 'DEBIT'
THEN t.transaction_amount
ELSE t.transaction_amount * -1
END
END), 2),10,' ') AS "Oct",
LPAD(FORMAT(SUM(
CASE
WHEN EXTRACT(MONTH FROM transaction_date) = 11 AND
EXTRACT(YEAR FROM transaction_date) = 2009
THEN
CASE
WHEN cl.common_lookup_type = 'DEBIT'
THEN t.transaction_amount
ELSE t.transaction_amount * -1
END
END), 2),10,' ') AS "Nov",
LPAD(FORMAT(SUM(
CASE
WHEN EXTRACT(MONTH FROM transaction_date) = 12 AND
EXTRACT(YEAR FROM transaction_date) = 2009
THEN
CASE
WHEN cl.common_lookup_type = 'DEBIT'
THEN t.transaction_amount
ELSE t.transaction_amount * -1
END
END), 2),10,' ') AS "Dec",
LPAD(FORMAT(SUM(
CASE
WHEN EXTRACT(MONTH FROM transaction_date) IN ('10','11','12') AND
EXTRACT(YEAR FROM transaction_date) = 2009
THEN
CASE
WHEN cl.common_lookup_type = 'DEBIT'
THEN t.transaction_amount
ELSE t.transaction_amount * -1
END
END), 2),10,' ') AS "FQ4",
LPAD(FORMAT(SUM(
CASE
WHEN EXTRACT(YEAR FROM transaction_date) = 2009
THEN
CASE
WHEN cl.common_lookup_type = 'DEBIT'
THEN t.transaction_amount
ELSE t.transaction_amount * -1
END
END), 2),10,' ') AS "YTD"
FROM transaction t INNER JOIN common_lookup cl
ON t.transaction_type = cl.common_lookup_id
WHERE cl.common_lookup_table = 'TRANSACTION'
AND cl.common_lookup_column = 'TRANSACTION_TYPE'
GROUP BY 'Total'
ORDER BY SORTKEY;
查询如下所示:
+-------------+---------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+
| Transaction | SORTKEY | Jan | Feb | Mar | FQ1 | Apr | May | Jun | FQ2 | Jul | Aug | Sep | FQ3 | Oct | Nov | Dec | FQ4 | YTD |
+-------------+---------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+
| Debit | 1 | 2,957.40 | 4,022.70 | 5,654.04 | 12,634.14 | 4,595.10 | 2,219.64 | 1,300.62 | 8,115.36 | 2,413.62 | 2,149.68 | 2,162.40 | 6,725.70 | 3,291.30 | 3,246.78 | 2,299.14 | 8,837.22 | 36,312.42 |
| Credit | 2 | -750.48 | -992.16 | -1,437.36 | -3,180.00 | -1,217.94 | -546.96 | -302.10 | -2,067.00 | -597.84 | -537.42 | -604.20 | -1,739.46 | -829.98 | -829.98 | -594.66 | -2,254.62 | -9,241.08 |
| Total | 3 | 2,206.92 | 3,030.54 | 4,216.68 | 9,454.14 | 3,377.16 | 1,672.68 | 998.52 | 6,048.36 | 1,815.78 | 1,612.26 | 1,558.20 | 4,986.24 | 2,461.32 | 2,416.80 | 1,704.48 | 6,582.60 | 27,071.34 |
+-------------+---------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+
我不知道MySQL中有任何功能允许这样做,但我相信您可以在MySQL中使用
orderby
中的CASE
,所以您可能不需要这样做
/* Remove SORTKEY from SELECT */
...
ORDER BY
CASE
WHEN t.transaction_account = '111-111-111-111' THEN 1
WHEN t.transaction_account = '222-222-222-222' THEN 2
END;
感谢您的回答,但不幸的是,这引发了一个
错误1054(42S22):“order子句”中的未知列“t.transaction\u account”
错误。假设它在SELECT
中起作用,它应该在order BY
中起作用。请确保您确实有这样一个列,并且没有输入错误。我已经仔细检查了该列的输入和有效性。没问题。我不知道为什么它不起作用。这只是列的别名问题。因为在ORDER BY
开始之前,该列标题为“Transaction”,所以我只需将t.Transaction\u账户
更改为Transaction
,并将111-111-111
更改为“Debit”,等等。然后,它就可以正常工作了!