3

次の行のテーブルがあります。

tblPictures

  • picID
  • picName
  • galleryID
  • アクティブです

クエリを実行して、たとえばgalleryID=3isActive=1

isActive行が1であるこの選択に画像がない場合(つまり、クエリは結果を返しません)、最初の画像isActive=1galleryID=3

誰かがこれについて私を導くことができますか?

4

2 に答える 2

5

どうぞ。基本的に、そのセットにアクティブレコードがあるかどうかを確認し、ない場合は、最初のレコード(picIDによって決定される)を更新します。必要に応じて、ストアドプロシージャまたは関数に貼り付けることも、スクリプトを実行してギャラリーIDを手動で変更することもできます。

DECLARE @Count INT,
@GalleryID INT

SET @GalleryID = 3

SELECT @Count = COUNT(*)
FROM tblPictures
WHERE galleryID=@GalleryID and isActive=1

IF @Count = 0
BEGIN

UPDATE tblPictures
SET isActive = 1
WHERE picID = (
    SELECT TOP 1 picID 
    FROM tblPictures 
    WHERE galleryID = @GalleryID 
    ORDER BY picID
    )

END

モアコード

これにより、アクティブな画像がないギャラリーの最初の画像(picIDによる)が更新されます。

UPDATE tblPictures
SET isActive = 1
WHERE picID IN (
    SELECT picID 
    FROM (
        SELECT galleryID, MIN(picID) AS 'picID'
        FROM tblPictures AS p
        JOIN (
            SELECT galleryID 
            FROM tblPictures 
            WHERE isActive = 1
            ) AS s ON p.galleryID <> s.galleryID
        GROUP BY galleryID
        )
    )

最も内側のサブクエリは、アクティブな画像があるギャラリーを検索します。次のステップでは、写真のあるものを除くgalleryIDを見つけます。次に、各galleryIDの最小のpicIDを見つけ、それらを使用してテーブルを更新します。

于 2012-09-13T22:58:20.043 に答える
-1

これを試して:

declare @tav table

(

gallaryid int,

isactive int

)

insert into @tav 

select

3,0 union all

select

4,0 union all

select

5,1

select * from @tav

update @tav set isactive=1

where gallaryid=3 and isactive=(select top(1)isactive from @tav  order by isactive)

select * from @tav

where gallaryid=3 and isactive=1
于 2012-09-14T07:19:20.977 に答える