我有几个回转整数值的wrap语句,在wrap语句中,值被正确计算...当我想从不同的包装语句中选择多个整数值时,我得到了问题...每个val的复制都有所不同,有时我得到的值比它应该的大200倍。
以下是代码结构的外观,
SELECT
SUM(c.val)
,SUM(t.val)
,SUM(x.val)
,SUM(z.val)
FROM
(SELECT CASE
WHEN ------CRITERIA FOR CODE HERE
FROM tableName
WHERE ...
)c,
(SELECT CASE
WHEN ------CRITERIA FOR CODE HERE
FROM tableName
WHERE ...
)t,
(SELECT CASE
WHEN ------CRITERIA FOR CODE HERE
FROM tableName
WHERE ...
)x,
(SELECT CASE
WHEN ------CRITERIA FOR CODE HERE
FROM tableName
WHERE ...
)z
答案 0 :(得分:0)
当您在where子句中进行子选择时,它实际上是交叉连接它们,而这不是您想要的。 如果每个子选择的“FROM tableName WHERE ...”部分相同,请在查询的SELECT部分中执行,如下所示:
SELECT
(CASE WHEN --criteria...) as c,
(CASE WHEN --criteria...) as t,
(CASE WHEN --criteria...) as x,
(CASE WHEN --criteria...) as z
FROM tableName
WHERE ...
答案 1 :(得分:0)
交叉连接将为您重复记录,并且您的SUM将会增加超出应有的数量。这就是为什么你得到的值比你预期的要大。
如果您发布完整查询,我们可以帮助您重写。
答案 2 :(得分:0)
我认为您的数据库正在对子查询的所有结果进行交叉连接。让我向您展示SQLite的一个例子:
sqlite> create table A(a,b);
sqlite> create table B(c,d);
sqlite> insert into B values ('1c','1d');
sqlite> insert into B values ('2c','2d');
sqlite> insert into A values ('1a','1b');
sqlite> insert into A values ('2a','2b');
sqlite> select a,b,c,d from A, B;
1a|1b|1c|1d
1a|1b|2c|2d
2a|2b|1c|1d
2a|2b|2c|2d
sqlite> select a,b from A;
1a|1b
2a|2b
sqlite> select c,d from B;
1c|1d
2c|2d
如您所见,表A和B都有两行。但是从A中选择*,B产生4行。那是因为它为A和B中的行创建了所有可能的组合。所以当你总和()列时,你会得到如此大的结果。
您可以尝试执行以下操作:
SELECT
max(first_big_one_column_select),
max(second_big_one_column_select),
...
但我不确定它是否会奏效。我认为在很大程度上取决于你正在使用的数据库。