2017-09-21 14 views
0

と互換性があるようにrow_number()でSQLクエリを変換する以前、私はSQLで通常使用するクエリを使用して、それぞれの 'Facility Code'/'注文番号 'の組み合わせ。これは、以下に示すユニオンクエリの下半分に含まれています。ExcelのOLEDBクエリ

Dim Query As String = "SELECT [Facility Code],[Mach],[Part Number],[Part Name],[Order No#],[OP],[Status],[Order Qty],[Qty Comp]," & _ 
           "[Mfg Due Date],[Planner],[Standard efficiency],[TBC ],[Std run labor time],[Std mach time],[Std setup hrs] " & _ 
           "From [" & sheetName & "] WHERE [Facility Code] LIKE 'R%' " & _ 
          "UNION " & _ 
            "SELECT m.[Facility Code],m.[Mach],m.[Part Number],m.[Part Name],m.[Order No#],m.[OP],m.[Status],m.[Order Qty],m.[Qty Comp]," & _ 
             "m.[Mfg Due Date],m.[Planner],m.[Standard efficiency],m.[TBC ],m.[Std run labor time],m.[Std mach time],m.[Std setup hrs] " & _ 
            "FROM " & _ 
            "(SELECT s.[Facility Code],s.[Mach],s.[Part Number],s.[Part Name],s.[Order No#],s.[OP],s.[Status],s.[Order Qty],s.[Qty Comp]," & _ 
             "s.[Mfg Due Date],s.[Planner],s.[Standard efficiency],s.[TBC],s.[Std run labor time],s.[Std mach time],s.[Std setup hrs], " & _ 
             "row_number() over(partition by s.[Facility Code],s.[Order No#] ORDER BY s.[OP] asc) as rn " & _ 
            "FROM [" & sheetName & "] s " & _ 
            "WHERE s.[Facility Code] LIKE 'J%') m " & _ 
            "WHERE m.rn =1 " 

私の問題は、これがExcelスプレッドシートから読み込みに失敗していることです。いくつかのグーグルに行くと、私はrow_number()コマンドは互換性がないと信じています。

私はそれを使わないで同じ出力を達成する必要があります、私はレコードをグループ化しようとしましたが、このクエリも失敗します。集計関数ではない 'group by'にないフィールドのためにエラーが発生します。

Dim Query As String = "SELECT [Facility Code],[Mach],[Part Number],[Part Name],[Order No#],[OP],[Status],[Order Qty],[Qty Comp]," & _ 
           "[Mfg Due Date],[Planner],[Standard efficiency],[TBC],[Std run labor time],[Std mach time],[Std setup hrs] " & _ 
           "From [" & sheetName & "] WHERE [Facility Code] LIKE 'R%' " & _ 
          "UNION " & _ 
          "SELECT [Facility Code],[Mach],[Part Number],[Part Name],[Order No#],[OP],[Status],[Order Qty],[Qty Comp]," & _ 
           "[Mfg Due Date],[Planner],[Standard efficiency],[TBC],[Std run labor time],[Std mach time],[Std setup hrs] " & _ 
           "From [" & sheetName & "] WHERE [Facility Code] LIKE 'J%' " & _ 
           "GROUP BY [Facility Code],[Order No#] ORDER BY [Facility Code],[Order No#],[OP] asc" 

事前に感謝の意を表します。

答えて

0

GROUP BY以外のフィールドを使用する場合は、FIRSTファンクションを使用する必要があります。

SELECT FIRST(a) FROM tbl GROUP BY b; 

もちろん、内側の値が異なる場合は、最初のものだけが使用されます。他のすべてを捨てる。私はデータを知らないので、これが問題であるかどうかはわかりません。

+0

したがって、他のすべてのフィールドにFIRST(a)関数を使用すると、最初の行が返されたデータを取得する必要があります。私がa、b、cでソートしている場合、他のすべての列は、私のソート(c)に基づいてその最初の行と共起する必要があります。私はそれらの他の分野で多くの異なる結果を持つだろう、私はただ同じ行からすべての値を取得することを確認する必要があります。 – SoundWaves

+0

同じ行から値を取得します。 ORDER BYを実行すると、ソート後の最初の行になります。 – Marius

+0

それはトリックをやった - ありがとう@マリアス! – SoundWaves