0

かなり大きな情報テーブルがあり、いくつかの異なる部門ごとに異なる方法でフィルタリングする必要があります。UNION できるように、同じ数の列を返す以下のクエリを作成しました。重複する行が返されないようにしたいので、UNION を使用しましたが、「Msg 8120, Level 16, State 1, Line 53 Column 'ACT_DW.dbo.INV-ACT.DNUM' is invalid」というエラーが表示され続けます集計関数にも GROUP BY 句にも含まれていないため、選択リストに含まれていません。」
ここで問題を見た人はいますか?私が取得しようとしているのは、可能であればワークグループごとに Deskname フィールドでグループ化されたすべてのレコードの 1 つの大きなテーブルです。

    declare @InventoryAsOfEOD date,
        @Start date,
        @End date   


SET @Start = CAST(DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()),0) AS DATE)
SET @End = CAST(DATEADD(DAY, -(DAY(DATEADD(MONTH, 1, GETDATE()))), DATEADD(MONTH, 1, GETDATE())) as DATE)

IF
    DATENAME(DW, GETDATE()) = 'Monday'
BEGIN
    Set @InventoryAsOfEOD = CAST(DATEADD(D, -3, GETDATE())AS DATE) 
END
ELSE
    Set @InventoryAsOfEOD = CAST(DATEADD(D, -1, GETDATE()) AS DATE)

print @inventoryasofeod
print @start
print @end



SELECT 
    DNUM,
    SSN,
    DTRFIRSTNAME,
    DTRLASTNAME,
    ASSIGNDATE,
    [DESK],
    Deskname,
    PYMTAMT1,
    DueDate,
    PnI,
    PIBALATSETUP,
    Ttl_Balance,
    pmgroup,
    PROGTYPE,
    office,
    client,
    batch,
    placetype,
    pymtdt1,
    Ttl_Starts

FROM

(SELECT 
    DNUM,
    SSN,
    DTRFIRSTNAME,
    DTRLASTNAME,
    ASSIGNDATE,
    [DESK],
    Deskname,
    PYMTAMT1,
    PROGSTARTDT as DueDate,
    sum([Prinbal]+[INTBAL]) as PnI,
    PIBALATSETUP,
    BALANCE as Ttl_Balance,
    pmgroup,
    PROGTYPE,
    office,
    client,
    batch,
    placetype,
    pymtdt1,
    COUNT(SSN) as Ttl_Starts

FROM 
    [ACT_DW].[dbo].[INV-ACT] with(INDEX([IX_INV-ACT_InventoryAsOfEOD]),nolock)
WHERE 
    InventoryAsOfEOD = @InventoryAsOfEOD AND
    BC ='GSL' AND
    PROGTYPE not in('PMT PLAN', 'Fallout', 'PIF', 'SIF') AND
    PROGTYPE is not null and
    PYMTDT1 BETWEEN @Start AND @End


UNION 
--Get Oregon Starts

SELECT 
    DNUM,
    SSN,
    DTRFIRSTNAME,
    DTRLASTNAME,
    ASSIGNDATE,
    [DESK],
    Deskname,
    PYMTAMT1,
    PROGSTARTDT as DueDate,
    sum([Prinbal]+[INTBAL]) as PnI,
    PIBALATSETUP,
    BALANCE as Ttl_Balance,
    pmgroup,
    PROGTYPE,
    office,
    client,
    batch,
    placetype,
    pymtdt1,
    COUNT(SSN) as Ttl_Starts

FROM 
    [ACT_DW].[dbo].[INV-ACT] with(INDEX([IX_INV-ACT_InventoryAsOfEOD]),nolock)
WHERE
    InventoryAsOfEOD = @InventoryAsOfEOD and
    CLIENT like 'ORDOR%' and    
    PROGTYPE not in ('Null', 'Fallout') AND
    PYMTDT1 BETWEEN @Start AND @End


UNION 
--Get Perkins Starts

SELECT 
    DNUM,
    SSN,
    DTRFIRSTNAME,
    DTRLASTNAME,
    ASSIGNDATE,
    [DESK],
    Deskname,
    PYMTAMT1,
    PROGSTARTDT as DueDate,
    sum([Prinbal]+[INTBAL]) as PnI,
    PIBALATSETUP,
    BALANCE as Ttl_Balance,
    pmgroup,
    PROGTYPE,
    office,
    client,
    batch,
    placetype,
    pymtdt1,
    COUNT(SSN) as Ttl_Starts
FROM
    [ACT_DW].[dbo].[INV-ACT] with(INDEX([IX_INV-ACT_InventoryAsOfEOD]),nolock)
WHERE
    InventoryAsOfEOD = @InventoryAsOfEOD and
    BC in ('PE1', 'PE2', 'PE3', 'NU1', 'NU2', 'NDS') and
    PROGTYPE not in ('Null', 'Fallout') AND
    PYMTDT1 BETWEEN @Start AND @End

UNION 

--Get starts for Tuition

SELECT 
    DNUM,
    SSN,
    DTRFIRSTNAME,
    DTRLASTNAME,
    ASSIGNDATE,
    [DESK],
    Deskname,
    PYMTAMT1,
    PROGSTARTDT as DueDate,
    sum([Prinbal]+[INTBAL]) as PnI,
    PIBALATSETUP,
    BALANCE as Ttl_Balance,
    pmgroup,
    PROGTYPE,
    office,
    client,
    batch,
    placetype,
    pymtdt1,
    COUNT(SSN) as Ttl_Starts
FROM
    [ACT_DW].[dbo].[INV-ACT] with(INDEX([IX_INV-ACT_InventoryAsOfEOD]),nolock)
WHERE
    InventoryAsOfEOD = @InventoryAsOfEOD and
    BC in ('AR1', 'AR2', 'IN1', 'IN2', 'IN3', 'TU1', 'TU2', 'TU3') and
    PROGTYPE not in ('Null', 'Fallout') AND
    PYMTDT1 BETWEEN @Start AND @End

UNION 

--Get Starts for Chase

SELECT 
    DNUM,
    SSN,
    DTRFIRSTNAME,
    DTRLASTNAME,
    ASSIGNDATE,
    [DESK],
    Deskname,
    PYMTAMT1,
    PROGSTARTDT as DueDate,
    sum([Prinbal]+[INTBAL]) as PnI,
    PIBALATSETUP,
    BALANCE as Ttl_Balance,
    pmgroup,
    PROGTYPE,
    office,
    client,
    batch,
    placetype,
    pymtdt1,
    COUNT(SSN) as Ttl_Starts
FROM
    [ACT_DW].[dbo].[INV-ACT] with(INDEX([IX_INV-ACT_InventoryAsOfEOD]),nolock)
WHERE
    InventoryAsOfEOD = @InventoryAsOfEOD and
    CLIENT like 'AG%' and
    PROGTYPE not in ('Null', 'Fallout') AND
    PYMTDT1 BETWEEN @Start AND @End) 
    as StartsTable

GROUP BY 
    DNUM,
    SSN,
    DTRFIRSTNAME,
    DTRLASTNAME,
    ASSIGNDATE,
    PYMTAMT1,
    DueDate,
    PIBALATSETUP,
    Ttl_Balance,
    PROGTYPE,
    DESK,
    deskname,
    PMGROUP,
    OFFICE,
    CLIENT,
    BATCH,
    PLACETYPE,
    PYMTDT1
ORDER BY 
    PMGROUP,
    DESK
4

1 に答える 1

0

GROUP BY集計を含むサブクエリごとに句を含める必要があります。代わりに、行を結合してから集計することもできますがそれは別のクエリになります。

于 2013-04-08T23:15:10.317 に答える