2017-01-13 2 views
0

こんにちは私は108の結果の配列を生成する選択クエリを合理化する必要があります。選択クエリを合理化する方法

SELECT (
    SELECT ISNULL(Sum(Dollars), 0) 
    FROM TableX 
    WHERE Column3 = 1 
     AND eventdate BETWEEN @start 
      AND @end 
     AND datepart(mm, eventdate) = 1 
    ) 

3列値:そう、本質的に1, 4, 3, 14, 17, 10, 9, 13, 6

... 1-11-21-121-3、その後4-14-24-12から4-3など

現在のクエリは次のようになります。

私はこのことを初めて知ったので、コードをコピーして貼り付けただけですdは値を調整しましたが、今は長すぎる25,000文字のクエリです。

これらをループする方法についてのヘルプや説明は、大変ありがたく思います。

おかげ

CREATE VIEW TableX (UNIQUEID,FILEKEY,EVENTDATE,GROUP1,GROUP2,GROUP3,PDN,RATE,HOURS,DOLLARS) AS 
SELECT 167278 AS UNIQUEID,1 AS FILEKEY,'2014-07-21 00:00:00.000' AS EVENTDATE,1 AS GROUP1,2 AS GROUP2,1 AS GROUP3,14 AS PDN,0 AS RATE,3 AS HOURS,0 AS DOLLARS 
UNION ALL 
SELECT 167277,1,'2014-07-24 00:00:00.000',1,2,1,1,5,1,5 
UNION ALL 
SELECT 167276,1,'2014-07-25 00:00:00.000',1,4,1,1,5,1,5 
UNION ALL 
SELECT 167269,1,'2014-07-07 00:00:00.000',1,2,1,1,5,8,40 
UNION ALL 
SELECT 167007,1,'2014-07-04 00:00:00.000',1,1,1,4,1,8,8 
UNION ALL 
SELECT 167006,1,'2014-07-06 00:00:00.000',1,1,1,1,1,1,1 
UNION ALL 
SELECT 166932,1,'2014-05-26 00:00:00.000',1,1,1,4,1,8,8 
UNION ALL 
SELECT 166904,1,'2013-12-25 00:00:00.000',1,1,1,4,18.25,8,146 
UNION ALL 
SELECT 166903,1,'2014-01-01 00:00:00.000',1,1,1,4,18.25,8,146 
UNION ALL 
SELECT 166902,1,'2013-11-28 00:00:00.000',1,1,1,4,18.25,8,146; 
+0

TableXの構造とデータを提供します – dfundako

+0

ループは、データを照会するときに可能な限り避けたいものです。誰かが本当の助けを提供する前に、より詳細な情報が必要です。ここから始めましょう。 http://spaghettidba.com/2015/04/24/how-to-post-a-t-sql-question-on-a-public-forum/ –

+0

あなたはなぜあなたの選択にselectを持っていますか?私は何かがここで欠けているように感じる。いくつかのサンプルデータを共有してください(column3と希望の結果と同じように、わかりやすいクエリを書くことができます)。 – JNevill

答えて

1

これはあなたのニーズを満たすことがあります

select column3 
     , datepart(mm, eventdate) monthNum 
     , isnull(sum(dollars)) dollarSum 
    from tablex 
    where eventDate between @start and @end 
group by column3, 
     datepart(mm, eventdate) monthNum 

は、月ではなく、年を選択すると良いアイデアではない、と述べました。

関連する問題