SQL-每列的where条件
这是一个一般的SQL问题,但如果您一定要知道数据库是Firebird,我会告诉您 我有这张表(简化): 基本上,我希望在结果上有多个字段,这些字段基于一个字段的总和(在本例中为数量),但基于不同的条件(在本例中为类型)SQL-每列的where条件,sql,firebird,where-clause,where,firebird2.1,Sql,Firebird,Where Clause,Where,Firebird2.1,这是一个一般的SQL问题,但如果您一定要知道数据库是Firebird,我会告诉您 我有这张表(简化): 基本上,我希望在结果上有多个字段,这些字段基于一个字段的总和(在本例中为数量),但基于不同的条件(在本例中为类型) 提前感谢您的建议。我不确定Firebird是如何做到的,但您能做一些类似的事情吗: SELECT user, sum(SELECT amount FROM table AS t2 WHERE t2.user = t1.user AND type="credit" ) AS cr
提前感谢您的建议。我不确定Firebird是如何做到的,但您能做一些类似的事情吗:
SELECT user,
sum(SELECT amount FROM table AS t2 WHERE t2.user = t1.user AND type="credit" ) AS credit,
sum(SELECT amount FROM table AS t3 WHERE t3.user = t1.user AND type="debit" ) AS debit
FROM table AS t1
GROUP BY user
ORDER BY user
我正在引用PostgreSQL中我认为应该使用的内容,以防帮助您找到所需内容。尝试以下方法:
SELECT credit.user_name, credit.cre, debit.deb
FROM (SELECT user_name, SUM(amount) cre FROM t WHERE TYPE = 'credit' GROUP BY user_name) credit
LEFT OUTER JOIN (SELECT user_name, SUM(amount) deb
FROM t
WHERE TYPE = 'debit'
GROUP BY user_name) debit
ON (credit.user_name = debit.user_name)
标准SQL是:
SELECT "user",
SUM(CASE WHEN type='credit' then amount END) as Credit,
SUM(CASE WHEN type='debit' then amount END) as Debit
FROM
"table"
GROUP BY
"user"
+1,尽管您需要引用
“user”
(并匹配列声明的大小写)。USER是当前_USER的Firebird同义词,它在您当前编写的查询中没有给出所需的结果。:)@皮尔克罗:你当然是对的,但这不只是一个模板吗?如果您认为此查询应该立即可运行,那么您应该提到表
也必须被引用:@安德烈-嘿,疯狂的事情可能会发生,人们可以使用保留词,我也可以修复它,使它可以作为一个真正的查询运行。我想type
没有被保留吗?@Damien:根据我的说法,似乎没有。(更新。但它被认为是一个关键词。)@Andriy,没错。然而,user
并不像table
那样到处都是保留字(至少MySQL和SQLite),在我看来,它似乎是原始帖子中使用的实际列名。谢谢
SELECT user,
sum(SELECT amount FROM table AS t2 WHERE t2.user = t1.user AND type="credit" ) AS credit,
sum(SELECT amount FROM table AS t3 WHERE t3.user = t1.user AND type="debit" ) AS debit
FROM table AS t1
GROUP BY user
ORDER BY user
SELECT credit.user_name, credit.cre, debit.deb
FROM (SELECT user_name, SUM(amount) cre FROM t WHERE TYPE = 'credit' GROUP BY user_name) credit
LEFT OUTER JOIN (SELECT user_name, SUM(amount) deb
FROM t
WHERE TYPE = 'debit'
GROUP BY user_name) debit
ON (credit.user_name = debit.user_name)
SELECT "user",
SUM(CASE WHEN type='credit' then amount END) as Credit,
SUM(CASE WHEN type='debit' then amount END) as Debit
FROM
"table"
GROUP BY
"user"