我只是想知道,在列名之前<0> <0>的目的是什么,因为我是这个领域的新手,所以帮助我理解清楚的事情并且更好办法。我的工作查询在下面给出,并且提到的行对我来说没有意义。感谢。
0 sdebit_amount ,
0 scredit_amount ,
0 scredit_amount,
SELECT
MONTH AS month,
ROUND(IFNULL(scredit_amount,0),2) AS purchase,
ROUND(IFNULL(sdebit_amount,0),2) AS cash_paid
FROM
(SELECT
MONTHNAME(sc.scredit_date) as month,
IFNULL(SUM(sc.scredit_amount),0) AS scredit_amount,
0 sdebit_amount
FROM
sup_credit sc
WHERE YEAR(sc.scredit_date) = YEAR(NOW())
GROUP BY MONTHNAME(sc.scredit_date)
union all
SELECT
MONTHNAME(sd.sdebit_date) as month,
0 scredit_amount,
IFNULL(SUM(sd.sdebit_amount),0) AS sdebit_amount
FROM
sup_debit sd
WHERE YEAR(sd.sdebit_date) = YEAR(NOW())
GROUP BY MONTHNAME(sd.sdebit_date)
union all
SELECT
MONTHNAME(tpr.date) as month,
0 scredit_amount,
IFNULL(SUM(tpr.sub_total),0) sdebit_amount
FROM
tbpurchase_return tpr WHERE tpr.method='CREDIT'
AND YEAR(tpr.date) = YEAR(NOW())
GROUP BY MONTH(tpr.date)
) ABC
group by month
答案 0 :(得分:0)
查看SELECT
statement的文档。
SELECT
子句可以包含一个或多个以逗号分隔的 select_expr 。 select_expr 是一个表达式(使用表格列,文字常量,运算符和函数组成)。
它可以有一个别名;别名是表达式后面的标识符,可以选择由AS
关键字引入。
在您的示例中,0 sdebit_amount
与0 AS sdebit_amount
相同,表示:选择值0
并使用sdebit_amount
作为结果集中此列的名称。结果集将包含一个名为sdebit_amount
的列,其值为0
,用于结果集中的所有行。
类似地,ABC
在最后group by month
之前是两个UNION ALL
statements(最外面的括号)生成的表的别名。虽然select表达式别名是可选的,但对于derived tables(更大查询的FROM
子句中出现的子查询)是必需的。
答案 1 :(得分:0)
该查询使用UNION
将表与信用记录和带有借记记录的表组合在一起。信用表没有debit_amount
列,借记表没有credit_amount
表。组合表需要这两列。因此,当查询从debit_amount
表中进行选择时,查询会添加0
列sup_credit
,并在credit_amount
列中添加0
列sup_debit
{1}}表。
然后外部查询将所有内容汇总在一起。