2017-09-21 1 views
0

과 호환되도록 변환합니다. 이전에는 SQL에서 normaly를 사용하여 각 'Facility Code'/ ''에 대해 가장 낮은 값의 'OP'를 가져 오는 쿼리를 사용하려고했습니다. 주문 번호 '쌍이 있습니다. 이것은 아래에 표시된 통합 쿼리의 아래쪽 절반에 포함되어 있습니다.row_number()가있는 SQL 쿼리를 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 스프레드 시트에서 읽는 중 오류가 발생합니다. google 검색을 마치면 row_number() 명령이 호환되지 않는다고 생각합니다.

레코드를 그룹화하려고했지만이 쿼리도 실패합니다. '그룹 기준'에없는 필드가 집계 함수가 아니기 때문에 오류가 발생합니다.

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