Please start any new threads on our new
site at https://forums.sqlteam.com. We've got lots of great SQL Server
experts to answer whatever question you can come up with.
Author |
Topic |
egemen_ates
Yak Posting Veteran
76 Posts |
Posted - 2012-08-14 : 14:15:44
|
Is this query correctly? How do I change the.I want to give the same result.i want to modify this query for performance.SELECT 0 AS A, 0 AS A_2, SUM(TEST_ROWS.AMOUNT) AS B, SUM(ISNULL(TEST_ROWS.AMOUNT_2,0)) AS B_2, TEST_ROWS.ACCOUNT_ID, TEST.ACTION_DATE, TEST.CARD_TYPE, TEST.CARD_CAT_ID FROM TEST_ROWS,TEST WHERE C = 0 AND TEST.CARD_ID=TEST_ROWS.CARD_ID GROUP BY TEST_ROWS.ACCOUNT_ID, TEST.ACTION_DATE, TEST.CARD_TYPE, TEST.CARD_CAT_ID UNION SELECT SUM(TEST_ROWS.AMOUNT) AS A, SUM(ISNULL(TEST_ROWS.AMOUNT_2,0)) AS A_2, 0 AS B, 0 AS B_2, TEST_ROWS.ACCOUNT_ID, TEST.ACTION_DATE, TEST.CARD_TYPE, TEST.CARD_CAT_ID FROM TEST_ROWS, TEST WHERE C = 1 AND TEST.CARD_ID = TEST_ROWS.CARD_ID GROUP BY TEST_ROWS.ACCOUNT_ID, TEST.ACTION_DATE, TEST.CARD_TYPE, TEST.CARD_CAT_ID |
|
visakh16
Very Important crosS Applying yaK Herder
52326 Posts |
Posted - 2012-08-14 : 14:48:52
|
what you've currently can be simplified asSELECTCASE WHEN C=1 THEN SUM(TEST_ROWS.AMOUNT) ELSE 0 END AS A,CASE WHEN C=1 THEN SUM(ISNULL(TEST_ROWS.AMOUNT_2,0)) ELSE 0 END AS A_2,CASE WHEN C=0 THEN SUM(TEST_ROWS.AMOUNT) ELSE 0 END AS B, CASE WHEN C=0 THEN SUM(ISNULL(TEST_ROWS.AMOUNT_2,0)) ELSE 0 END AS B_2,TEST_ROWS.ACCOUNT_ID,TEST.ACTION_DATE,TEST.CARD_TYPE,TEST.CARD_CAT_IDFROMTEST_ROWS,TESTWHEREC IN (0,1) AND TEST.CARD_ID=TEST_ROWS.CARD_IDGROUP BYTEST_ROWS.ACCOUNT_ID,TEST.ACTION_DATE,TEST.CARD_TYPE,TEST.CARD_CAT_ID ------------------------------------------------------------------------------------------------------SQL Server MVPhttp://visakhm.blogspot.com/ |
 |
|
egemen_ates
Yak Posting Veteran
76 Posts |
Posted - 2012-08-14 : 15:07:16
|
thank for answer.TEST_ROWS.C is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.given error.quote: Originally posted by visakh16 what you've currently can be simplified asSELECTCASE WHEN C=1 THEN SUM(TEST_ROWS.AMOUNT) ELSE 0 END AS A,CASE WHEN C=1 THEN SUM(ISNULL(TEST_ROWS.AMOUNT_2,0)) ELSE 0 END AS A_2,CASE WHEN C=0 THEN SUM(TEST_ROWS.AMOUNT) ELSE 0 END AS B, CASE WHEN C=0 THEN SUM(ISNULL(TEST_ROWS.AMOUNT_2,0)) ELSE 0 END AS B_2,TEST_ROWS.ACCOUNT_ID,TEST.ACTION_DATE,TEST.CARD_TYPE,TEST.CARD_CAT_IDFROMTEST_ROWS,TESTWHEREC IN (0,1) AND TEST.CARD_ID=TEST_ROWS.CARD_IDGROUP BYTEST_ROWS.ACCOUNT_ID,TEST.ACTION_DATE,TEST.CARD_TYPE,TEST.CARD_CAT_ID ------------------------------------------------------------------------------------------------------SQL Server MVPhttp://visakhm.blogspot.com/
|
 |
|
visakh16
Very Important crosS Applying yaK Herder
52326 Posts |
Posted - 2012-08-14 : 15:18:34
|
tht was a typoSELECTSUM(CASE WHEN C=1 THEN TEST_ROWS.AMOUNT ELSE 0 END) AS A,SUM(CASE WHEN C=1 THEN ISNULL(TEST_ROWS.AMOUNT_2,0) ELSE 0 END) AS A_2,SUM(CASE WHEN C=0 THEN TEST_ROWS.AMOUNT ELSE 0 END) AS B, SUM(CASE WHEN C=0 THEN ISNULL(TEST_ROWS.AMOUNT_2,0) ELSE 0 END) AS B_2,TEST_ROWS.ACCOUNT_ID,TEST.ACTION_DATE,TEST.CARD_TYPE,TEST.CARD_CAT_IDFROMTEST_ROWS,TESTWHEREC IN (0,1) AND TEST.CARD_ID=TEST_ROWS.CARD_IDGROUP BYTEST_ROWS.ACCOUNT_ID,TEST.ACTION_DATE,TEST.CARD_TYPE,TEST.CARD_CAT_ID ------------------------------------------------------------------------------------------------------SQL Server MVPhttp://visakhm.blogspot.com/ |
 |
|
egemen_ates
Yak Posting Veteran
76 Posts |
Posted - 2012-08-14 : 15:38:08
|
i think this correct query cost relative batch:36% - 64% thank sir everything SELECTCASE WHEN C=1 THEN SUM(TEST_ROWS.AMOUNT) ELSE 0 END AS A,CASE WHEN C=1 THEN SUM(ISNULL(TEST_ROWS.AMOUNT_2,0)) ELSE 0 END AS A_2,CASE WHEN C=0 THEN SUM(TEST_ROWS.AMOUNT) ELSE 0 END AS B, CASE WHEN C=0 THEN SUM(ISNULL(TEST_ROWS.AMOUNT_2,0)) ELSE 0 END AS B_2,TEST_ROWS.ACCOUNT_ID,TEST.ACTION_DATE,TEST.CARD_TYPE,TEST.CARD_CAT_IDFROMTEST_ROWS,TESTWHEREC IN (0,1) AND TEST.CARD_ID=TEST_ROWS.CARD_IDGROUP BYTEST_ROWS.ACCOUNT_ID,TEST.ACTION_DATE,TEST.CARD_TYPE,TEST.CARD_CAT_IDBAquote: Originally posted by visakh16 tht was a typoSELECTSUM(CASE WHEN C=1 THEN TEST_ROWS.AMOUNT ELSE 0 END) AS A,SUM(CASE WHEN C=1 THEN ISNULL(TEST_ROWS.AMOUNT_2,0) ELSE 0 END) AS A_2,SUM(CASE WHEN C=0 THEN TEST_ROWS.AMOUNT ELSE 0 END) AS B, SUM(CASE WHEN C=0 THEN ISNULL(TEST_ROWS.AMOUNT_2,0) ELSE 0 END) AS B_2,TEST_ROWS.ACCOUNT_ID,TEST.ACTION_DATE,TEST.CARD_TYPE,TEST.CARD_CAT_IDFROMTEST_ROWS,TESTWHEREC IN (0,1) AND TEST.CARD_ID=TEST_ROWS.CARD_IDGROUP BYTEST_ROWS.ACCOUNT_ID,TEST.ACTION_DATE,TEST.CARD_TYPE,TEST.CARD_CAT_ID ------------------------------------------------------------------------------------------------------SQL Server MVPhttp://visakhm.blogspot.com/
|
 |
|
visakh16
Very Important crosS Applying yaK Herder
52326 Posts |
Posted - 2012-08-14 : 15:40:47
|
so is it better to original query?------------------------------------------------------------------------------------------------------SQL Server MVPhttp://visakhm.blogspot.com/ |
 |
|
egemen_ates
Yak Posting Veteran
76 Posts |
Posted - 2012-08-14 : 15:47:37
|
yes sir this query better than orginal query.quote: Originally posted by visakh16 so is it better to original query?------------------------------------------------------------------------------------------------------SQL Server MVPhttp://visakhm.blogspot.com/
|
 |
|
|
|
|
|
|