2016-06-30 11 views
-1

FlySpeed SQLクエリのアプリではなく、Microsoft SQL Serverの管理Studioで:SQL Server Management Studioでクエリが機能しない

SELECT * 
FROM 
    table1 t 
JOIN 
    (SELECT 
     col1, col2, CONVERT(date, col3) as dt 
    FROM 
     table1 
    GROUP BY 
     col1, col2, dt 
    HAVING 
     COUNT(*) > 1) temp ON t.col1 = temp.col1     
          AND t.col2 = temp.col2 
          AND CONVERT(date, t.col3) = dt 
ORDER BY 
    t.col1 desc 

私はSSMSでこれを取得する:

メッセージ207、レベル16、状態1、行5
無効な列名 ' dt '。

+0

'temp.col1'のように' temp.dt'を試してください –

+3

グループのカラムエイリアスは、byを使うことはできないので、 'GROUP BY col1、col2、dt'の代わりに式全体を使う必要があります - 'GROUP BY col1、col2、CONVERT(date、col3)'。これは、 'GROUP BY'が' SELECT'の前に評価されているので、これを評価するとき、クエリエンジンは列 'dt'を知りません(言い換えれば、 – GarethD

+1

これは価値があるのですが、ウィンドウ関数を使って同じことを達成し、テーブルから一度だけ読み込むことができます: 'SELECT * FROM(SELECT *、cnt = COUNT(* )OVER(PARTITION BY col1、col2、CONVERT(date、col3))FROM table1)t WHERE t.Cnt> 1' – GarethD

答えて

2

以下のクエリを使用し、

SELECT * 
FROM table1 t 
JOIN (
      SELECT col1, 
       col2, 
       CONVERT(date, col3) as dt 
      FROM table1 
      GROUP BY col1, col2, CONVERT(date, col3) 
      HAVING COUNT(*) > 1 
    ) temp 
    ON t.col1 = temp.col1 
    AND t.col2 = temp.col2 
    AND CONVERT(date, t.col3) = dt 
ORDER BY t.col1 desc 
1
SELECT * 
FROM table1 t 
JOIN (SELECT col1, col2, CONVERT(date, col3) as dt 
     FROM table1 
     GROUP BY col1, col2, CONVERT(date, col3) 
     HAVING COUNT(*) > 1) temp 
    ON t.col1 = temp.col1 AND t.col2= temp.col2 and CONVERT(date, t.col3)=temp.dt 
ORDER By t.col1 desc 
+1

5行目に問題があります。 – fishmong3r

+0

はい申し訳ありませんが、私はGROUP BYを見ていませんでした。あなたはALIASのみで注文できますが、GROUP BYは注文できません。私はスクリプトを更新した – mvisser

1

変更GROUP

GROUP BY col1, col2, dt 

から句によって:

GROUP BY col1, col2, CONVERT(date, col3) 
1

あなたには、列の別名を使用していますグループ化する。それはあなたの代わりにこの表現を使う方が良いでしょう:

GROUP BY col1, col2, CONVERT(date, col3) 

GROUP BY col1, col2, dt 

の代わりに、私はこれが動作すると思います。

関連する問題