0

次のクエリを実行すると、上記のエラーが発生します。これは、サブクエリが複数の結果を返しているためだと思いますが、修正方法がわかりません。

    update a
    set a.covtypeplus = (SELECT distinct
    REPLACE(REPLACE(ISNULL([BI],'x') + '+' + ISNULL([PD],'x') + '+' +
                    ISNULL([COM],'x') + '+' + ISNULL([COMGL],'x') + '+' + ISNULL([COL],'x') + '+' + ISNULL([COLDW],'x') + '+' +
                    ISNULL([MED],'x') + '+' + ISNULL([PIP],'x') + '+' + ISNULL([PIPNI],'x') + '+' + ISNULL([PIPNR],'x') + '+' +
                    ISNULL([UM],'x') + '+' + ISNULL([UMBI],'x') + '+' + ISNULL([UMBA],'x') + '+' + ISNULL([UMS],'x') + '+' +
                    ISNULL([UMPD],'x') + '+' + ISNULL([UMPA],'x') + '+' +   
                    ISNULL([UIM],'x') + '+'+ ISNULL([UIMBI],'x') + '+' + ISNULL([UIMC],'x') + '+' + ISNULL([UIS],'x') + '+' +
                    ISNULL([UIMPD],'x') + '+' + ISNULL([MEX],'x') + '+' +
                    ISNULL([ACC],'x') + '+' + ISNULL([CPI],'x') + '+' + ISNULL([INC],'x') + '+' + ISNULL([FUN],'x') + '+' + ISNULL([XMD],'x')
                    , 'x+', ''), '+x', '') AS CovTypePlus
    FROM (SELECT distinct POLICYID, VERSION, COVCODE FROM Staging.Coverage) p LEFT JOIN (

    SELECT *
    FROM (
    SELECT POLICYID, VERSION, COVCODE
    FROM Staging.Coverage
    WHERE SUBSTRING(COVCODE, 1, 2) IN ('BI','PD','CO','ME','PI','UM','UI','AC','CP','IN','FU','XM','LD','RA','RE','RO','SP','TO','SG','WM')) p 


    PIVOT (MAX(COVCODE) FOR COVCODE IN (
    [BI], [PD], [COM], [COMGL], [COL], [COLDW],
    [MED], [PIP], [PIPNI], [PIPNR],
    [UM], [UMBI], [UMBA], [UMS], [UMPD], [UMPA],
    [UIM], [UIMBI], [UIMC], [UIS], [UIMPD],
    [ACC], [CPI], [INC], [FUN], [XMD], [LD], [MEX], [RA], [REN], [ROADS], [SPE], [TOW], [SGC], [WMAR]
    )) AS pvt) vc ON p.POLICYID = vc.POLICYID AND p.VERSION = vc.VERSION)

    from results_vehicle a
    left join staging.coverage c on a.polnum =c.policyid and a.polver = c.version and a.covcode = c.COVCODE

私が作成した(更新ではなく)次の元のクエリを実行すると、正常に動作するため、更新構文で間違っているに違いありません。

    SELECT DISTINCT p.POLICYID AS PolNum, p.VERSION As PolVer,
    REPLACE(REPLACE(ISNULL([BI],'x') + '+' + ISNULL([PD],'x') + '+' +
                    ISNULL([COM],'x') + '+' + ISNULL([COMGL],'x') + '+' + ISNULL([COL],'x') + '+' + ISNULL([COLDW],'x') + '+' +
                    ISNULL([MED],'x') + '+' + ISNULL([PIP],'x') + '+' + ISNULL([PIPNI],'x') + '+' + ISNULL([PIPNR],'x') + '+' +
                    ISNULL([UM],'x') + '+' + ISNULL([UMBI],'x') + '+' + ISNULL([UMBA],'x') + '+' + ISNULL([UMS],'x') + '+' +
                    ISNULL([UMPD],'x') + '+' + ISNULL([UMPA],'x') + '+' +   
                    ISNULL([UIM],'x') + '+'+ ISNULL([UIMBI],'x') + '+' + ISNULL([UIMC],'x') + '+' + ISNULL([UIS],'x') + '+' +
                    ISNULL([UIMPD],'x') + '+' + ISNULL([MEX],'x') + '+' +
                    ISNULL([ACC],'x') + '+' + ISNULL([CPI],'x') + '+' + ISNULL([INC],'x') + '+' + ISNULL([FUN],'x') + '+' + ISNULL([XMD],'x')
                    , 'x+', ''), '+x', '') AS CovTypePlus
    FROM (SELECT DISTINCT POLICYID, VERSION, COVCODE FROM Staging.Coverage) p LEFT JOIN (

    SELECT *
    FROM (
    SELECT POLICYID, VERSION, COVCODE
    FROM Staging.Coverage
    WHERE SUBSTRING(COVCODE, 1, 2) IN 
('BI','PD','CO','ME','PI','UM','UI','AC','CP','IN','FU','XM','LD','RA','RE','RO','SP','TO','SG','WM')) p 

    PIVOT (MAX(COVCODE) FOR COVCODE IN (
    [BI], [PD], [COM], [COMGL], [COL], [COLDW],
    [MED], [PIP], [PIPNI], [PIPNR],
    [UM], [UMBI], [UMBA], [UMS], [UMPD], [UMPA],
    [UIM], [UIMBI], [UIMC], [UIS], [UIMPD],
    [ACC], [CPI], [INC], [FUN], [XMD], [LD], [MEX], [RA], [REN], [ROADS], [SPE], [TOW], [SGC], [WMAR]
    )) AS pvt) vc ON p.POLICYID = vc.POLICYID AND p.VERSION = vc.VERSION

どんな助けでも大歓迎です。クエリをいじってみましたが、同じ結果が得られました。また、SELECT TOP 1 を追加してみましたが、すべてのポリシーで同じ結果が得られました。

4

2 に答える 2

0

あなたがやっている:

update a
set a.covtypeplus = (SELECT distinct . . .

これは、そのサブクエリから複数の結果が期待されていることを示しています。禁止されている。

おそらくこれで修正されるでしょうが、それはあなたが望むものではないかもしれません:

update a
set a.covtypeplus = (SELECT top 1 . . .
于 2013-05-15T18:50:45.910 に答える
0

あなたを台無しにしているのはこの部分のようです:

from results_vehicle a
    left join staging.coverage c on a.polnum =c.policyid
       and a.polver = c.version and a.covcode = c.COVCODE

これは、a.covcode の一部の値に対して複数の結果を生成しているに違いありません。

于 2013-05-15T18:56:10.333 に答える