0

这是设置:

Table 1: table_1
column_id
column_12
column_13
column_14

Table 2: table_2
column_id
column_21
column_22

选择语句:

DECLARE @Variable 
INT SET @Variable = 300

SELECT b.column_id, 
        b.column_12, 
        SUM(b.column_13) OVER (PARTITION BY b.column_id ORDER BY b.column_12) AS sum_column_13, 
        @Variable / nullif(SUM(b.column_13) OVER (PARTITION BY b.column_id ORDER BY b.column_12),0) AS divide_var, 
        (b.column_13*100) / nullif(b.column_14,0) AS divide_column_3 
FROM dbo.table_1 b 
WHERE b.column_12 IN ('AM','AJ','A-M','A-J','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q');

这很好用,所有公式都有效,并且显示了正确的结果。
b.column_id被检索
b.column_12被检索
sum_column_13等于所有column_13值的总和(由 分区column_id
divide_var等于一个变量 被潜水sum_column_13
divide_column_13等于column_13除以column_14

但是,现在我正在尝试检索@Variablefrom table_2,而不是静态的。

两个表都有一个column_id,可以将它们链接在一起。然而,这个值并不是唯一的。
的实际数字@Variable应该来自table_2; 通过对每个 column_id 的所有值求和column_21。(类似 sum_column_13 的东西)

我可以让这两件事分开工作,但是当我尝试将它们结合起来(与一个JOIN或一个额外的SELECT类)时,一切都会变得疯狂。例如,当使用JOIN语句时,WHERE类仅应用于JOIN语句而不应用于SELECT语句。我想它应该如何使用column_id当前的结果SELECT,然后使用它来检索所需的数据table_2

我明白我的解释不是很清楚。所以这是一个 SQLFiddle。正如您所看到的,现在的变量来自将 中的两个值相加table_2。希望这可以帮助。

谢谢,

4

1 回答 1

0

这是示例代码,我没有使用变量,而是直接使用列的总和,我也使用了 CTE:

with tbl_2(col_id, col_sum) as
( select col_id, sum(column_21) col_sum from tbl_2 group by col_id)
SELECT b.column_id, 
        b.column_12, 
        SUM(b.column_13) OVER (PARTITION BY b.column_id ORDER BY b.column_12) AS sum_column_13, 
        col_sum / nullif(SUM(b.column_13) OVER (PARTITION BY b.column_id ORDER BY b.column_12),0) AS divide_var, 
        (b.column_13*100) / nullif(b.column_14,0) AS divide_column_3 
FROM dbo.table_1 b 
join tbl_2 on b.col_id=tbl_2.col_id
WHERE b.column_12 IN ('AM','AJ','A-M','A-J','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q');
于 2013-07-26T15:59:02.130 回答