Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL-每列的where条件_Sql_Firebird_Where Clause_Where_Firebird2.1 - Fatal编程技术网

SQL-每列的where条件

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

这是一个一般的SQL问题,但如果您一定要知道数据库是Firebird,我会告诉您

我有这张表(简化):

基本上,我希望在结果上有多个字段,这些字段基于一个字段的总和(在本例中为数量),但基于不同的条件(在本例中为类型)


提前感谢您的建议。

我不确定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"