SQL复制数据 -

时间:2012-01-18 20:27:13

标签: sql sql-server-2005

我有几个回转整数值的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

3 个答案:

答案 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),
  ...

但我不确定它是否会奏效。我认为在很大程度上取决于你正在使用的数据库。