如何在没有子查询的情况下获得价值(在SQL-Server上)?

时间:2012-11-18 00:07:35

标签: sql sql-server sql-server-2000

我在SQL Server上有以下表格:

ID   Num
 1     A
 2     B
 2     B
 3     C
 3     C
 4     C

Num是一个数字列 - 出于此问题的目的,A,B和C是数值的替换值)

如何在不使用子查询和CTE的情况下获取A+B+C+C的值?

A - 1, B - 2, C - 3, C - 4

答案似乎是sum(distinct Num),但区别在于ID字段!

演示表:

create table test (ID int, Num int);
insert into test values (1, 10);
insert into test values (2, 100);
insert into test values (2, 100);
insert into test values (3, 1000);
insert into test values (3, 1000);
insert into test values (4, 1000);

正确答案是10 + 100 + 1000 + 1000 = 2110。

2 个答案:

答案 0 :(得分:2)

随机猜测,使用CTE避免无意义的子查询限制:

With X as (Select Distinct Id, No From Test)

Select
  Sum(No) 
From X

或者使用派生表(在SQL 2000中有效):

Select
  Sum(No)
From (
  Select Distinct
    Id,
    No
  From
    Test
) a;

http://sqlfiddle.com/#!3/77a6e/6

答案 1 :(得分:2)

解决方案:

select cast(sum(distinct Num + cast(0.00001 as number(38,19))/ID) as number(18,2))