1

各列にいくつかの画像を含むテーブルがあります。

Acd_unq_id  Emp_unq_id  Acd_BImg1   Acd_BImg2  Acd_RImg1  Acd_RImp2  Acd_RImg3  Acd_Active

1          1745     BinaryImg   BinaryImg     NULL      NULL       NULL         1
2          1745        NULL        NULL    BinaryImg    NULL       NULL         1
3          1745        NULL        NULL       NULL      BinaryImg  BinaryImg    1
4          1769     BinaryImg   BinaryImg     NULL      NULL       BinaryImg    1

上記の例では、一意の Emp ID ごとに 1 つの列でデータを取得したいと考えています。したがって、上記の例によれば、結果は次のようになります-

Acd_unq_id  Emp_unq_id  Acd_BImg1   Acd_BImg2  Acd_RImg1  Acd_RImp2  Acd_RImg3  Acd_Active

1          1745     BinaryImg   BinaryImg  BinaryImg  BinaryImg  BinaryImg     1
4          1769     BinaryImg   BinaryImg     NULL      NULL     BinaryImg     1

私はこれについてクエリを書きました -

SELECT
(
SELECT TOP 1 ACH_BILL_IMG1 FROM ADVERT_CAMPAIGN_HEADERS INNER JOIN ADVERT_CAMPAIGN_HEADERS
ON ACH_UNQ_ID = ACD_ACH_UNQ_ID WHERE ACD_SOC_UNQ_ID = 1745 AND ACD_IMAGETYPE IN ('H, Q')) as bill_img1

(SELECT TOP 1 ACH_BILL_IMG2 FROM ADVERT_CAMPAIGN_HEADERS INNER JOIN ADVERT_CAMPAIGN_HEADERS
ON ACH_UNQ_ID = ACD_ACH_UNQ_ID WHERE ACD_SOC_UNQ_ID = 1745 AND ACD_IMAGETYPE IN ('H, Q'))

サブクエリとトップ1を使用して結果を取得したい.しかし、私が書いた上記のサンプルクエリでは、構文エラーが発生しています....

*FROM 句のオブジェクト「ADVERT_CAMPAIGN_HEADERS」と「ADVERT_CAMPAIGN_HEADERS」は、同じ公開名を持っています。相関名を使用してそれらを区別します。*

助けてください。あなたの返事を待っています、専門家:)

4

3 に答える 3

1

どうですか:

SELECT [Acd_unq_id] = MIN([Acd_unq_id])
, [Emp_unq_id]
, [Acd_BImg1] = MAX([Acd_BImg1])
, [Acd_BImg2] = MAX([Acd_BImg2])
, [Acd_RImg1] = MAX([Acd_RImg1])
, [Acd_RImp2] = MAX([Acd_RImp2])
, [Acd_RImg3] = MAX([Acd_RImg3])
, [Acd_Active] = MAX([Acd_Active])
FROM ADVERT_CAMPAIGN_HEADERS
GROUP BY [Emp_unq_id]
于 2013-02-16T16:24:13.953 に答える
0

クエリから、画像列にはnull以外の値が1つだけあると思います。望ましい結果が得られるかもしれませんが、パフォーマンスの観点からはわかりません。また、これに関する他の代替クエリも楽しみにしています。

;WITH tempCompaignHeaders(ACD_UNQ_ID,Acd_Active) AS
(
    SELECT DISTINCT Emp_unq_id, Acd_Active FROM ADVERT_CAMPAIGN_HEADERS
)
SELECT
       (SELECT TOP 1 ACD_UNQ_ID FROM ADVERT_CAMPAIGN_HEADERS WHERE Emp_unq_id = t.Emp_unq_id ORDER BY ACD_UNQ_ID) Acd_BImg1,
       Emp_unq_id
       (SELECT TOP 1 Acd_BImg1 FROM ADVERT_CAMPAIGN_HEADERS WHERE Emp_unq_id = t.Emp_unq_id AND Acd_BImg1 IS NOT NULL) Acd_BImg1,
       (SELECT TOP 1 Acd_BImg2 FROM ADVERT_CAMPAIGN_HEADERS WHERE Emp_unq_id = t.Emp_unq_id AND Acd_BImg2 IS NOT NULL) Acd_BImg2,
       (SELECT TOP 1 Acd_RImg1 FROM ADVERT_CAMPAIGN_HEADERS WHERE Emp_unq_id = t.Emp_unq_id AND Acd_RImg1 IS NOT NULL) Acd_RImg1,
       (SELECT TOP 1 Acd_RImg2 FROM ADVERT_CAMPAIGN_HEADERS WHERE Emp_unq_id = t.Emp_unq_id AND Acd_RImg2 IS NOT NULL) Acd_RImg2,
       (SELECT TOP 1 Acd_RImg3 FROM ADVERT_CAMPAIGN_HEADERS WHERE Emp_unq_id = t.Emp_unq_id AND Acd_RImg3 IS NOT NULL) Acd_RImg3,
       Acd_Active
FROM
       tempCompaignHeaders t
于 2013-02-16T14:02:04.730 に答える
0

これを試して

`Select xx.Emp_unq_id,Acd_BImg1,Acd_BImg2,Acd_RImg1,Acd_RImg2,Acd_RImg3 from
((select  Emp_unq_id,Acd_BImg1 from yourtab where Emp_unq_id =1745
and Acd_BImg1 is not null)A 
inner join
select  Emp_unq_id,Acd_BImg2 from yourtab where Emp_unq_id =1745
and Acd_BImg2 is not null) B 
on A.Emp_unq_id=B.Emp_unq_id
inner join
(select  Emp_unq_id,Acd_RImg1 from yourtab where Emp_unq_id =1745
and Acd_RImg1 is not null) C
on B.Emp_unq_id=C.Emp_unq_id
inner join
(select  Emp_unq_id,Acd_RImg2 from yourtab where Emp_unq_id =1745
and Acd_RImg2 is not null) D
on C.Emp_unq_id=D.Emp_unq_id
inner join (select  Emp_unq_id,Acd_RImg3 from yourtab where Emp_unq_id =1745
and Acd_RImg3 is not null) E
on D.Emp_unq_id=E.Emp_unq_id)XX`

他の従業員 ID についてもこのクエリを繰り返します...

于 2013-02-16T13:36:57.913 に答える