Переписать оператор MS Access SQL для SQL Server - PullRequest
0 голосов
/ 14 октября 2019

Я хочу преобразовать следующую инструкцию MS Access SQL в SQL Server. Все мои попытки приводят к отличным результатам от старых и исходных данных.

SELECT 
    Sum(ADA_LAST.MA) AS MA, 
    Sum(ADA_LAST.DA) AS DA, 
    ADA_LAST.ID_BAS, 
    ADA_LAST.PRO_NUMBER, 
    ADA_LAST.ACC_NUMBER, 
    ADA_LAST.DATA, 
    "" AS Q,
     "" AS P, 
    Last(ADA_LAST.Date) AS [DATE], 
    "" AS UNIT, 
    0 AS ID, 
    [MA]-[DA] AS R
FROM ADA_LAST
GROUP BY 
    ADA_LAST.ID_BAS, 
    ADA_LAST.PRO_NUMBER, 
    ADA_LAST.ACC_NUMBER, 
    ADA_LAST.DATA, 
    "", 
    0, 
    [MA]-[DA],
    "", 
    ""
;

Новый запрос:

SELECT 
    MA = Sum([ADA_LAST].[MA]), 
    DA = Sum([ADA_LAST].[DA]), 
    [ADA_LAST].[ID_BAS],
    [ADA_LAST].[PRO_NUMBER], 
    [ADA_LAST].[ACC_NUMBER], 
    [ADA_LAST].[DATA], 
    Q = '', 
    P = '', 
    [DATE] = ADA_LAST.[Date],
    UNIT = '', 
    ID = 0, 
    Sum([ADA_LAST].[MA]) - Sum([ADA_LAST].[DA]) AS R
FROM [ADA_LAST](@PRO_NAME,@SDAY)
GROUP BY 
    [ADA_LAST].[ACC_NUMBER],
    [ADA_LAST].[Date],
    [ADA_LAST].[PRO_NUMBER],
    [ADA_LAST].[ID_BAS], 
    [ADA_LAST].[DATA]

Проблема, вызванная группировкой столбца даты в новом операторе,но в старом он используется в функции Last, чтобы избежать его группировки, и все еще существует в операторе select. Как это можно сделать.

1 Ответ

2 голосов
/ 14 октября 2019

Вы можете попробовать следующий запрос. Изменения к оригиналу:

  • пустая строка записывается как '' вместо ""
  • Я заменяю LAST на MAX();это, вероятно, будет делать то, что вы хотите, так как вы используете агрегирование
  • константные столбцы не должны быть перечислены в предложении GROUP BY

Код:

SELECT 
    SUM(ADA_LAST.MA) AS MA, 
    SUM(ADA_LAST.DA) AS DA, 
    ADA_LAST.ID_BAS, 
    ADA_LAST.PRO_NUMBER, 
    ADA_LAST.ACC_NUMBER, 
    ADA_LAST.DATA, 
    '' AS Q, 
    '' AS P, 
    MAX(ADA_LAST.Date) AS [DATE], 
    '' AS UNIT, 
    0 AS ID, 
    [MA] - [DA] AS R
FROM ADA_LAST
GROUP BY 
    ADA_LAST.ID_BAS, 
    ADA_LAST.PRO_NUMBER, 
    ADA_LAST.ACC_NUMBER, 
    ADA_LAST.DATA, 
    [MA] - [DA]
;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...