22,300
社区成员




--无耻地抄袭小三的数据
--练练手,写个2000的写法
--被LZ害惨了
--临时表是不是用多了,好像TEMP2可以不用
-- =========================================
-- -----------t_mac 小编-------------------
--------------------希望有天成为大虾----
-- =========================================
IF OBJECT_ID('tb') IS NOT NULL
DROP TABLE tb
GO
CREATE TABLE tb( Id int,string varchar(10),bz int)
go
insert tb
SELECT 1,'a',1 UNION ALL
SELECT 1,'b',0 UNION ALL
SELECT 1,'c',1 UNION ALL
SELECT 2,'d',0 UNION ALL
SELECT 2,'a',0 UNION ALL
SELECT 2,'f',0 UNION ALL
SELECT 2,'g',1 UNION ALL
SELECT 2,'e',0
go
SELECT identity(int,1,1) 'row',*
INTO #TEMP
FROM TB
SELECT
ID
,CASE WHEN bz=1 THEN STRING ELSE '' END 'BZ1'
,CASE WHEN bz=0 THEN STRING ELSE '' END 'BZ2'
,[NEWID]
,BZ
INTO #TEMP2
FROM (
SELECT
(SELECT COUNT(1) FROM #TEMP T2 WHERE T2.ID=T1.ID AND T2.ROW<=T1.ROW) 'NEWID'
,* FROM #TEMP T1) T
SELECT
(SELECT COUNT(1) FROM #TEMP2 T3 WHERE T3.ID=T.ID AND T3.BZ=T.BZ AND T3.[NEWID]<=T.[NEWID]) 'NEWID2'
,* INTO #TEMP3 FROM #TEMP2 T
--SELECT * FROM #TEMP3
SELECT ID,MAX(BZ1),MAX(BZ2) FROM #TEMP3
GROUP BY ID,NEWID2
ORDER BY ID ASC
DROP TABLE #TEMP
DROP TABLE #TEMP2
DROP TABLE #TEMP3
/*
1 a b
1 c
2 g d
2 a
2 f
2 e
*/
-- =========================================
-- -----------t_mac 小编-------------------
--------------------希望有天成为大虾----
-- =========================================
IF OBJECT_ID('tb') IS NOT NULL
DROP TABLE tb
GO
CREATE TABLE tb( Id int,string varchar(10),bz int)
go
insert tb SELECT
1, 'a' ,1 UNION ALL SELECT
1, 'b' ,0 UNION ALL SELECT
1, 'c' ,1 UNION ALL SELECT
2, 'd' ,1 UNION ALL SELECT
2, 'a' ,0 UNION ALL SELECT
2, 'f' ,0 UNION ALL SELECT
2, 'g' ,1 UNION ALL SELECT
2, 'e', 0
go
select IDENTITY(int,1,1) as idd ,* into # from tb
select
idd=identity(int,1,1),
Id,
bz1=max(case when rn%2=1 then String else '' end ),
bz2=max(case when rn%2=0 then String else '' end )
into #2
from(select rn=(select count(*) from # where l.id=id and IDd<=l.idd),* from # l) k
group by id,(rn-1)/2
order by Id
select
ID=(case when idd=(select MIN(idd) from #2 where k.id=id) then rtrim(ID) else '' end),
bz1, bz2
from #2 k
/*
ID bz1 bz2
------------ ---------- ----------
1 a b
c
2 d a
g f
e
*/
--无耻地抄袭小三的数据
--练练手,写个2000的写法
--被LZ害惨了
-- =========================================
-- -----------t_mac 小编-------------------
--------------------希望有天成为大虾----
-- =========================================
IF OBJECT_ID('tb') IS NOT NULL
DROP TABLE tb
GO
CREATE TABLE tb( Id int,string varchar(10),bz int)
go
insert tb SELECT
1, 'a' ,1 UNION ALL SELECT
1, 'b' ,0 UNION ALL SELECT
1, 'c' ,1 UNION ALL SELECT
2, 'd' ,1 UNION ALL SELECT
2, 'a' ,0 UNION ALL SELECT
2, 'f' ,0 UNION ALL SELECT
2, 'g' ,1 UNION ALL SELECT
2, 'e', 0
go
SELECT identity(int,1,1) 'row',*
INTO #TEMP
FROM TB
SELECT
ID
,MAX(CASE WHEN bz=1 THEN STRING ELSE '' END) 'BZ1'
,MAX(CASE WHEN bz=0 THEN STRING ELSE '' END) 'BZ2'
FROM (
SELECT
(SELECT COUNT(1) FROM #TEMP T2 WHERE T2.ID=T1.ID AND T2.ROW<=T1.ROW) 'NEWID'
,* FROM #TEMP T1) T
GROUP BY ID,([NEWID]+1)/2
ORDER BY ID ASC
DROP TABLE #TEMP
/*
1 a b
1 c
2 d a
2 g f
2 e
*/
-- =========================================
-- -----------t_mac 小编-------------------
--------------------希望有天成为大虾----
-- =========================================
IF OBJECT_ID('tb') IS NOT NULL
DROP TABLE tb
GO
CREATE TABLE tb( Id int,string varchar(10),bz int)
go
insert tb SELECT
1, 'a' ,1 UNION ALL SELECT
1, 'b' ,0 UNION ALL SELECT
1, 'c' ,1 UNION ALL SELECT
2, 'd' ,1 UNION ALL SELECT
2, 'a' ,0 UNION ALL SELECT
2, 'f' ,0 UNION ALL SELECT
2, 'g' ,1 UNION ALL SELECT
2, 'e', 0
go
select
idd=identity(int,1,1),
Id,
bz1=max(case when bz=1 then String else '' end ),
bz2=max(case when bz=0 then String else '' end )
into #1
from(select rn=ROW_NUMBER()over(partition by id order by getdate() ),* from tb ) k
group by id,(rn-1)/2
order by Id
select
ID=(case when idd=(select MIN(idd) from #1 where k.id=id) then rtrim(ID) else '' end),
bz1, bz2
from #1 k
/*
ID bz1 bz2
------------ ---------- ----------
1 a b
c
2 d a
g f
e
*/
----------------------------------------------------------------
-- Author :fredrickhu(小F,向高手学习)
-- Date :2009-08-28 22:21:09
-- Verstion:
--Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86)
--Nov 24 2008 13:01:59
--Copyright (c) 1988-2005 Microsoft Corporation
--Developer Edition on Windows NT 5.1 (Build 2600: Service Pack 3)
----------------------------------------------------------------
--> 测试数据:[tb]
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([Id] int,[string] varchar(1),[bz] int)
insert [tb]
select 1,'a',1 union all
select 1,'b',0 union all
select 1,'c',1 union all
select 2,'d',1 union all
select 2,'a',0 union all
select 2,'f',0 union all
select 2,'g',1 union all
select 2,'e',0
--------------开始查询--------------------------
select
id,
bz1=isnull((case bz when 1 then string else '' end),''),
bz2=isnull((case bz when 0 then string else '' end),'')
from [tb]
group by
id,isnull((case bz when 1 then string else '' end),''),
isnull((case bz when 0 then string else '' end),'')
----------------结果----------------------------
/* id bz1 bz2
----------- ---- ----
1 b
1 a
1 c
2 a
2 e
2 f
2 d
2 g
(8 行受影响)
*/
--无耻地抄袭小三的数据
--练练手,写个2000的写法
-- =========================================
-- -----------t_mac 小编-------------------
--------------------希望有天成为大虾----
-- =========================================
IF OBJECT_ID('tb') IS NOT NULL
DROP TABLE tb
GO
CREATE TABLE tb( Id int,string varchar(10),bz int)
go
insert tb SELECT
1, 'a' ,1 UNION ALL SELECT
1, 'b' ,0 UNION ALL SELECT
1, 'c' ,1 UNION ALL SELECT
2, 'd' ,1 UNION ALL SELECT
2, 'a' ,0 UNION ALL SELECT
2, 'f' ,0 UNION ALL SELECT
2, 'g' ,1 UNION ALL SELECT
2, 'e', 0
go
SELECT identity(int,1,1) 'row',*
INTO #TEMP
FROM TB
SELECT
ID
,MAX(CASE WHEN NEWID%2=1 THEN STRING ELSE '' END) 'BZ1'
,MAX(CASE WHEN NEWID%2=0 THEN STRING ELSE '' END) 'BZ2'
FROM (
SELECT
(SELECT COUNT(1) FROM #TEMP T2 WHERE T2.ID=T1.ID AND T2.ROW<=T1.ROW) 'NEWID'
,* FROM #TEMP T1) T
GROUP BY ID,([NEWID]+1)/2
ORDER BY ID ASC
DROP TABLE #TEMP
/*
1 a b
1 c
2 d a
2 f g
2 e
*/
-- =========================================
-- -----------t_mac 小编-------------------
--------------------希望有天成为大虾----
-- =========================================
IF OBJECT_ID('tb') IS NOT NULL
DROP TABLE tb
GO
CREATE TABLE tb( Id int,string varchar(10),bz int)
go
insert tb SELECT
1, 'a' ,1 UNION ALL SELECT
1, 'b' ,0 UNION ALL SELECT
1, 'c' ,1 UNION ALL SELECT
2, 'd' ,1 UNION ALL SELECT
2, 'a' ,0 UNION ALL SELECT
2, 'f' ,0 UNION ALL SELECT
2, 'g' ,1 UNION ALL SELECT
2, 'e', 0
go
select
Id,
bz1=max(case when bz=1 then String else '' end ),
bz2=max(case when bz=0 then String else '' end )
from(select rn=ROW_NUMBER()over(partition by id order by getdate() ),* from tb ) k
group by id,(rn-1)/2
order by Id
/*
Id bz1 bz2
----------- ---------- ----------
1 a b
1 c
2 d a
2 g f
2 e
*/