2017-09-07 9 views
1

2つの結果セットの期間が必要です。最初のセットには、給与計算が終了した期間と、有効期間が1つのみの第2のセットが含まれます。だから私は昇順にアクティブ期間を導出するために2番目のセットで順序を行います。しかし、私は常にUnion Keywordの近くで "Incorrect Syntax"を取得します。私はこれについて何が起こっているのかを追跡することができません。SQL ServerのToadでUnion Allを使用したOrder By節で作業するときの構文エラー2016

SELECT SysId AS PeriodId, 
     [Name] AS PeriodName, 
     Number AS PeriodNumber, 
     [Year] AS PeriodYear, 
     PayrollSetId AS PayrollSetId 
    FROM (SELECT p.SysId AS PeriodId, 
       p.[Name] AS PeriodName, 
       p.Number AS PeriodNumber, 
       p.[Year] AS PeriodYear, 
       p.PayrollSetId AS PayrollSetId 
      FROM PeriodPayrollSetLookupView p 
     WHERE p.Closed = 1 
     UNION ALL 
     SELECT TOP 1 
       p.SysId AS PeriodId, 
       p.[Name] AS PeriodName, 
       p.Number AS PeriodNumber, 
       p.[Year] AS PeriodYear, 
       p.PayrollSetId AS PayrollSetId 
      FROM PeriodPayrollSetLookupView p 
     WHERE isnull (p.Closed, 0) = 0 
     ORDER BY p.[Year], p.[Name] 
     UNION ALL 
     SELECT '00000000-0000-0000-0000-000000000000' AS PeriodId, 
     '<Select...>' AS PeriodName, 
     NULL AS PeriodNumber, 
     NULL AS PeriodYear, 
     '00000000-0000-0000-0000-000000000000' AS PayrollSetId)AS PERIOD 
ORDER BY [Year] DESC, Number DESC 

非常に助かります。

答えて

0

UNIONで使用されている選択項目にORDER BYを使用することはできません。 CTE's

WITH closed AS (SELECT p.SysId AS periodid, 
        p.[Name] AS periodname, 
        p.Number AS periodnumber, 
        p.[year] AS periodyear, 
        p.PayrollSetId AS payrollsetid 
       FROM PeriodPayrollSetLookupView p 
      WHERE p.closed = 1), 
active AS (SELECT TOP 1 
        p.SysId AS periodid, 
        p.[Name] AS periodname, 
        p.Number AS periodnumber, 
        p.[year] AS periodyear, 
        p.PayrollSetId AS payrollsetid 
       FROM PeriodPayrollSetLookupView p 
      WHERE isnull (p.closed, 0) = 0 
      ORDER BY p.[year], p.[name]), 
x AS (SELECT '00000000-0000-0000-0000-000000000000' AS periodid, 
       '<select...>' AS periodname, 
       NULL AS periodnumber, 
       NULL AS periodyear, 
       '00000000-0000-0000-0000-000000000000' AS payrollsetid) 
SELECT * 
    FROM (SELECT periodid, 
       periodname, 
       periodnumber, 
       periodyear, 
       payrollsetid 
      FROM closed 
     UNION ALL 
     SELECT periodid, 
       periodname, 
       periodnumber, 
       periodyear, 
       payrollsetid 
      FROM active 
     UNION ALL 
     SELECT periodid, 
       periodname, 
       periodnumber, 
       periodyear, 
       payrollsetid 
      FROM x) t 
ORDER BY periodyear DESC, periodnumber DESC 
+0

ありがとうございます。これは私のために働いた。 –

+0

お寄せいただきありがとうございます! :) –

関連する問題