sqlserver 2005 交叉表和層次關係查詢

2021-05-04 01:26:19 字數 2357 閱讀 8291

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...