sql的max之類的彙總函式只能針對同一列的n行運算,如果對n列運算,一般都用case 語句來判斷,如果列少還比較容易寫,列多了就麻煩了。--------------------------------------------------------------------------------/* 測試名稱:利用 XML 求任意列之間的彙總 測試功能:對一張表的列資料做 min 、 max 、 sum 和 avg 運算 運行原理:欄位合并為 xml 後做 xquery 查詢轉為行集後彙總 *
最近在開發項目的過程中遇到一個問題,就是在插入一條記錄的後要立即擷取所在資料庫中ID,而該ID是自增的,怎麼做?在sql server 2005中有幾種方式可以實現。 要擷取此ID,最簡單的方法就是在查詢之後select @@indentity--SQL語句建立資料庫和表複製代碼 代碼如下:create database dbdemogouse dbdemogocreate table tbldemo( id int primary key identity(1,1), name
設定sqlServer使用ROW_NUMBER時不排序 --1.看到NHibernate是這樣寫的分頁,感覺寫起來比較容易理解(應該不會有效率問題吧?) --with只是定一個別名? [sql] with query as (select ROW_NUMBER() over(order by (select 0)) AS ROWNUM, * FROM Product) select * from query where ROWNUM BETWEEN 5 AND 10
在MySQL中,可以用 Limit 來查詢第 m 列到第 n 列的記錄,例如:複製代碼 代碼如下:select * from tablename limit m, n但是,在SQL Server中,不支援 Limit 語句。怎麼辦呢?解決方案:雖然SQL Server不支援 Limit ,但是它支援 TOP。我們以SQL Server 2005為例,就以它內建的示範資料庫 AdventureWorks 作為測試資料:複製代碼 代碼如下:select id from
對於結果集有幾個處理,值得講解一下1. 並集(union,Union all)這個很簡單,是把兩個結果集水平合并起來。例如SELECT * FROM AUNIONSELECT * FROM B【注意】union會重複資料刪除值,也就是說A和B中重複的行,最終只會出現一次,而union all則會保留重複行。2. 差異(Except)就是兩個集中不重複的部分。例如SELECT * FROM AEXCEPTSELECT * FROM B這個的意思是,凡是不出現在B表中的A表的行。3.
方法一 複製代碼 代碼如下:declare @max integer,@id integer declare cur_rows cursor local for select 主欄位,count(*) from 表名 group by 主欄位 having count(*) > 1 open cur_rows fetch cur_rows into @id,@max while @@fetch_status=0 begin select @max = @max -1 set
複製代碼 代碼如下:-- SQL Server 2000 SELECT a.name AS 欄位名, CASE WHEN EXISTS (SELECT 1 FROM sysobjects WHERE xtype = 'PK' AND parent_obj = a.id AND name IN (SELECT name FROM sysindexes WHERE indid IN (SELECT indid FROM sysindexkeys WHERE id = a.id AND colid =