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_13column_id
divide_varsum_column_13
divide_column_13column_13column_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です。ご覧のとおり、現在の変数は の 2 つの値を合計したもの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 に答える