我有一個包含以下行的表。如果符合條件,更新sql server表中的第一行
tblPictures
- picID
- picName
- galleryID
- isActive
我想運行一個查詢與galleryID=3
和isActive=1
如果在這個選擇沒有圖片與isActive行是1(換言之,查詢不返回任何結果)我想使第一張圖片的isActive=1
與galleryID=3
任何人都可以指導我嗎?
我有一個包含以下行的表。如果符合條件,更新sql server表中的第一行
tblPictures
我想運行一個查詢與galleryID=3
和isActive=1
如果在這個選擇沒有圖片與isActive行是1(換言之,查詢不返回任何結果)我想使第一張圖片的isActive=1
與galleryID=3
任何人都可以指導我嗎?
你在這裏。基本上,它會檢查該組中是否有任何活動記錄,如果沒有,則更新第一個(由圖片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並使用它們來更新表格。
Emin,我添加了另一個查詢,應該一次完成整個表格,如果你想看看。 – Jim
這就像你今晚有詩意:))非常感謝你! –
試試這個:
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
你需要告訴我們如何定義 「第一」。 SQL Server認爲一個表是無序的一組行;您需要爲其提供條件(例如,給定日期時間列中的最早值),以便它可以可靠且重複地使用相同的方法更新您稱爲「第一個」的行。 –
第一行是什麼意思?按主索引排序還是什麼? – ajon
好的,我很抱歉不清楚..我現在正在更新我的問題.. –