CTE saklı yordam çalışmıyor

oy
-2

Daha sonra sorguda çağırmak için tabloları inşa ediyor bir saklı yordam var. Ben yeni bir CTE kullanan tablo, ama şimdi onu çalıştırdığınızda eklemek zorunda kalmıştım; ifadesini sonlandırmak için, ben yakın bir hata yanlış sözdizimi alıyorum ';' Bunu kaldırdığınızda ve ben bir olması gerekir hata alıyorum; Bir CTE ile. Sorgu kendisi saklı yordam dışında çalışır. Herhangi bir yardım mutluluk duyacağız ....

set @cdq = 'insert #REMOVAL_FLAG
(
    MYKEY,
    REMOVAL_FLAG
)

    WITH 
create_key AS(
        SELECT *,
        (CONVERT(varchar(25), a.NDC11, 101) + CONVERT(varchar(25), a.PharmacyID, 101) + CONVERT(varchar(50),ABS(a.TotalNetCost),101)) as REVERSAL_KEY

        FROM table1 a

),

find_rev AS (

        SELECT *,
            CASE
                WHEN MIN(TotalAmount) OVER (PARTITION BY REVERSAL_KEY) < 0 THEN 1 ELSE NULL
            END as Flag

        FROM create_key

),

primary_flag as (

        SELECT TOP 1500000 *,
            DENSE_RANK() OVER (ORDER BY REVERSAL_KEY) as [GROUP],
            ROW_NUMBER() OVER (PARTITION BY NDC11, PharmacyID, TotalNetCost ORDER BY REVERSAL_KEY) as PK

        FROM find_rev

        WHERE Flag = 1

        ORDER BY [GROUP], PK
),

flagged as (
        SELECT *,
            CASE
                WHEN COUNT (PK) OVER (PARTITION BY [GROUP], PK) > 1 THEN ''REMOVE''
            END as REMOVAL_FLAG

        FROM primary_flag
)

SELECT a1.MYKEY, f.REMOVAL_FLAG

FROM table1 a1
LEFT OUTER JOIN flagged f ON (f.MYKEY = a1.MYKEY)


'
Oluştur 02/08/2013 saat 17:47
kullanıcı
Diğer dillerde...                            


1 cevaplar

oy
1

Bir insertdeyim bir CTE (kullanabilirsiniz withifade). SQL Server, bu gider önceinsert , önce değil select:

WITH 
create_key AS(
        SELECT *,
        (CONVERT(varchar(25), a.NDC11, 101) + CONVERT(varchar(25), a.PharmacyID, 101) + CONVERT(varchar(50),ABS(a.TotalNetCost),101)) as REVERSAL_KEY

        FROM table1 a

),
find_rev AS (
        SELECT *,
            CASE
                WHEN MIN(TotalAmount) OVER (PARTITION BY REVERSAL_KEY) < 0 THEN 1 ELSE NULL
            END as Flag
        FROM create_key
),
primary_flag as (

        SELECT TOP 1500000 *,
            DENSE_RANK() OVER (ORDER BY REVERSAL_KEY) as [GROUP],
            ROW_NUMBER() OVER (PARTITION BY NDC11, PharmacyID, TotalNetCost ORDER BY REVERSAL_KEY) as PK
        FROM find_rev
        WHERE Flag = 1
        ORDER BY [GROUP], PK
),
flagged as (
        SELECT *,
            CASE
                WHEN COUNT (PK) OVER (PARTITION BY [GROUP], PK) > 1 THEN ''REMOVE''
            END as REMOVAL_FLAG
        FROM primary_flag
)
insert #REMOVAL_FLAG(MYKEY, REMOVAL_FLAG)
    SELECT a1.MYKEY, f.REMOVAL_FLAG
    FROM table1 a1
    LEFT OUTER JOIN flagged f ON (f.MYKEY = a1.MYKEY)
Cevap 02/08/2013 saat 17:51
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more