2016-07-27 4 views
1

これは初めてのT-SQLに関する質問です。初心者です。私は2つのCTEを10行未満に絞り込んだSQLクエリを持っています。私は、実行中の合計を取得するために、SUMステートメントを使用しています:クエリ結果にID列を追加する

Sum(Diff) OVER(ORDER BY DateAdded) AS Summary 

DateAddedは、いくつかの行に同じ値を持っています。したがって、それは私に各行の合計を与えるものではありません。私は自分のORDER BY句のために使用することができるように、単に行の数をカウントするフィールドを作成する必要があります(DBテーブルのPKに似ています)。私の理解が正しいとすれば、これを機能させるためにはこれが必要です。クエリ結果セットに列挙型列を追加するにはどうすればよいですか?注意してください、私はALTERテーブルにしたくない、単にクエリ結果に列を追加します。私が書いたことがはっきりしていることを希望します。ありがとうございました!

+0

CountとSumは2つの全く異なるものです – Adam

+1

"単純に行の数を数えるフィールド(DBテーブルのPKに似ています)" - うーん、それはキーの定義ではありません。 – onedaywhen

+0

私は理解しています。私はPKを定義しようとしていなかった、と言う。出力をどのように表示するかを説明するために使用していました。ごめんなさい! – Brian

答えて

0

代わりのcount()を使用するかsum()あなたに行ごとに、1から始まる、個別の行番号を与えるであろうrow_number()を使用することができます結果セット:

SELECT ROW_NUMBER() OVER (ORDER BY dateAdded) as Summary 
+0

彼は 'ROW_NUMBER'を最初に取得し、次にその次のウィンドウ集約(この場合は' SUM')の 'ORDER BY'でそれを使用できるように、ネストされたCTEを必要とする実行中の合計を取得しようとしています。 –

+0

OPは、単に「行数を数えるフィールド」を必要とするだけで、合計が必要だとは言いません。 OPはそれを行うために 'SUM()'を使っていましたが、 'Sum()'が文字通り何が求められていたのかを仮定していません。 – JNevill

+0

@TomHは私が欲しいものを理解するのに正しいです(多分私は明確ではなかった、私は謝ります)。 'ROW_NUMBER()'は私が探していたもの(追加の列挙型列)を私の稼働中の合計で使用するために与えてくれました。 – Brian

-1

私はあなたは自分のORDER BYNEWID()を追加することができると信じている:

SELECT SUM(diff) OVER (ORDER BY DateAdded, NEWID()) AS Summary 
+0

これはうまくいきましたが、行の順序が何とか変更されました。 – Brian

+0

@onedaywhen彼はたくさんのことを言った。私は実際の問題に答えました、彼のポストの最後の特定の質問ではありません。それは私の経験では、ペダンティヴではなく、より有用な傾向があります。 –

+0

@Brian特定の行順序を保持しようとするなら、あなたは 'OVER'句だけでなく、クエリに' ORDER BY'を持たなければなりません。これは決してそれに影響しません。 –

0

はこれを試してみてください:

DECLARE @Result TABLE 
(
    DT DATETIME 
) 
INSERT INTO @Result SELECT '1 Jan 1900' 
INSERT INTO @Result SELECT '1 Jan 1900' 

SELECT ROW_NUMBER() OVER(ORDER BY DT DESC) AS "Row Number", DT 
FROM @Result 
関連する問題