2012-09-13 91 views
2

我有一個包含以下行的表。如果符合條件,更新sql server表中的第一行

tblPictures

  • picID
  • picName
  • galleryID
  • isActive

我想運行一個查詢與galleryID=3isActive=1

選擇,例如所有圖片

如果在這個選擇沒有圖片與isActive行是1(換言之,查詢不返回任何結果)我想使第一張圖片的isActive=1galleryID=3

任何人都可以指導我嗎?

+2

你需要告訴我們如何定義 「第一」。 SQL Server認爲一個表是無序的一組行;您需要爲其提供條件(例如,給定日期時間列中的最早值),以便它可以可靠且重複地使用相同的方法更新您稱爲「第一個」的行。 –

+0

第一行是什麼意思?按主索引排序還是什麼? – ajon

+0

好的,我很抱歉不清楚..我現在正在更新我的問題.. –

回答

4

你在這裏。基本上,它會檢查該組中是否有任何活動記錄,如果沒有,則更新第一個(由圖片ID確定)。如果你喜歡,你可以將它粘貼到存儲過程或函數中,或者只需運行腳本並手動更改庫ID。

DECLARE @Count INT, 
@GalleryID INT 

SET @GalleryID = 3 

SELECT @Count = COUNT(*) 
FROM tblPictures 
WHERE [email protected] 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 

MOAR CODE

這應該更新在任何庫中的第一畫面(由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 
     ) 
    ) 

最內層的子查詢發現DO具有活性的圖片畫廊。下一步找到不包含有圖片的galleryID。然後我們找到每個galleryID的最低picID並使用它們來更新表格。

+0

Emin,我添加了另一個查詢,應該一次完成整個表格,如果你想看看。 – Jim

+0

這就像你今晚有詩意:))非常感謝你! –

-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