sqlserver2005已經方便提供交叉表和層次關係查詢,下面分別舉例說明:
--交叉表查詢
create table sales(
id int,
area nvarchar(20),
product_id nvarchar(4))go
insert into sales
select 1,'aa','a001'
union all
select 2,'bb','b001'
union all
select 3,'cc','c001'
union all
select 4,'cc','c002'
goselect * from sales
--原表記錄:
---------------
1 aa a001
2 bb b001
3 cc c001
4 cc c002
--查詢
declare @s varchar(8000)
declare @sql varchar(8000)
set @s=''
set @sql=''
select @s = isnull(@s + ',','')+ ltrim(area)
from (select distinct area from sales) a
set @s = right(@s,len(@s)-1)
--print @s
set @sql = 'select id,'+@s+'
from
sales
pivot
( count (product_id)
for area in ('+@s+' )
)as unpvt'
--print @sql
exec(@sql)
--行列轉換結果
id aa bb cc
-------------------
1 1 0 0
2 0 1 0
3 0 0 1
4 0 0 1
--輸出的sql
select id,aa,bb,cc
from
sales
pivot
( count (product_id)
for area in (aa,bb,cc)
)as unpvt
---層次關係查詢
create table employeetbl(
id int identity,
name varchar(20),
pid int)go
insert into employeetbl
(name,pid)
select 'root',0
union all
select 'root001',1
union all
select 'root002',1
goinsert into employeetbl
(name,pid)
select 'root001_a',2
union all
select 'root001_b',2
goselect * from employeetbl
go原表中資料:
id name pid
1 root 0
2 root001 1
3 root002 1
4 root001_a 2
5 root001_b 2
--查詢root001的上級層次關係
with c as (
select * from employeetbl where id = 2
union all
select a.* from employeetbl a
join c on a.id = c.pid
)select * from c order by id asc
結果:1 root 0
2 root001 1
--查詢root001的下級層次關係
with c as (
select * from employeetbl where name = 'root001'
union all
select a.* from employeetbl a
join c on a.id = c.pid
)select * from c
結果:2 root001 1
4 root001_a 2
5 root001_b 2
SQL Server2005複製實現
一 準備工作 1 在發布伺服器上建立乙個共享目錄,作為發布快照檔案的存放目錄。例如 在d 盤根目錄下建資料夾名為pub 2 設定sql 發布伺服器和訂閱伺服器均設定 步驟 開啟服務 控制面板 管理工具 服務 右擊sqlserver agent 屬性 登入 選擇 此帳戶 輸入或選擇第一步中建立的win...
SQL Server 2005完全解除安裝
sql server 2005的解除安裝是乙個非常頭疼的問題。我曾經嘗試過直接使用 新增或刪除程式 工具解除安裝 清除安裝目錄 刪除登錄檔內容等等各種方式綜合解除安裝,勉強成功。現在終於找到了乙個事半功倍的方法,多次嘗試,未有失敗,具體如下 第一種是微軟官方提供的工具 msicuu2.exe 微軟官...
SQLSERVER 2005 遞迴查詢
專案中有使用者組表usergroup如下 其中pid表示當前組的上級組 表資料如下 現在想查詢出頂級組 沒有上級組叫頂級組 a1組的所有子孫組id,sql如下 查詢子節點 with rtd1 as select id pid from usergroup rtd2 as select from rt...