27,579
社区成员
发帖
与我相关
我的任务
分享
WITH L AS
(
SELECT '0' AS Col UNION
SELECT '1' UNION
SELECT '2' UNION
SELECT '3' UNION
SELECT '4' UNION
SELECT '5' UNION
SELECT '6' UNION
SELECT '7' UNION
SELECT '8' UNION
SELECT '9' UNION
SELECT 'A' UNION
SELECT 'B' UNION
SELECT 'C' UNION
SELECT 'D' UNION
SELECT 'E' UNION
SELECT 'F'
)
SELECT A.Col + B.Col + C.Col + D.Col
FROM L AS A,L AS B,L AS C,L AS D
CREATE TABLE t1
(
col VARCHAR(1)
)
INSERT INTO t1
SELECT '0' UNION ALL
SELECT '1' UNION ALL
SELECT '2' UNION ALL
SELECT '3' UNION ALL
SELECT '4' UNION ALL
SELECT '5' UNION ALL
SELECT '6' UNION ALL
SELECT '7' UNION ALL
SELECT '8' UNION ALL
SELECT '9' UNION ALL
SELECT 'A' UNION ALL
SELECT 'B' UNION ALL
SELECT 'C' UNION ALL
SELECT 'D' UNION ALL
SELECT 'E' UNION ALL
SELECT 'F'
SELECT * FROM t1
;WITH aaa AS
(SELECT a.col AS col1,b.col AS col2,c.col AS col3,d.col AS col4 FROM t1 AS a
CROSS JOIN t1 AS b CROSS JOIN t1 AS c CROSS JOIN t1 AS d)
,bbb AS
(SELECT col1+col2+col3+col4 AS col FROM aaa )
SELECT * FROM bbb ORDER BY col
-------------------------
col
0000
0001
0002
0003
0004
0005
0006
0007
...
FFF7
FFF8
FFF9
FFFA
FFFB
FFFC
FFFD
FFFE
FFFF
USE tempdb
GO ;
WITH a AS (SELECT TOP 32 ROW_NUMBER()OVER(ORDER BY RAND()) AS Col FROM sysobjects) SELECT CAST(col AS BINARY(2)) AS [二进制] FROM a
/* 0x0001 0x0002 0x0003 0x0004 0x0005 0x0006 0x0007 0x0008 0x0009 0x000A 0x000B 0x000C 0x000D 0x000E 0x000F 0x0010 0x0011 0x0012 0x0013 0x0014 0x0015 0x0016 0x0017 0x0018 0x0019 0x001A 0x001B 0x001C 0x001D 0x001E 0x001F 0x0020 */
--> 测试数据:[test]
if object_id('[test]') is not null
drop table [test]
create table [test](
[id] int,
[name] varchar(5),
[recorddate] date,
[workhours] numeric(3,2)
)
go
insert [test]
select 1,'sa','2012-06-10',8.00 union all
select 2,'sa','2012-06-11',8.00 union all
select 3,'root','2012-06-11',9.00 union all
select 4,'root','2012-06-14',7.00 union all
select 5,'admin','2012-06-15',6.00 union all
select 6,'sa','2012-06-10',3.00
go
declare @StartTime date
set @StartTime='2012-06-10'
;with t
as(
select distinct b.name,DATEADD(DD,number,@StartTime) as [recorddate]
from master..spt_values a
cross join test b
where number between 0 and 5 and type='p'
)
select t.name,t.recorddate,sum(isnull(m.workhours,0.00)) as workhours
from t
left join test m
on t.recorddate=m.recorddate and t.name=m.name
group by t.name,t.recorddate
order by t.name,t.recorddate
/*
name recorddate workhours
----------------------------------------------
admin 2012-06-10 0.00
admin 2012-06-11 0.00
admin 2012-06-12 0.00
admin 2012-06-13 0.00
admin 2012-06-14 0.00
admin 2012-06-15 6.00
root 2012-06-10 0.00
root 2012-06-11 9.00
root 2012-06-12 0.00
root 2012-06-13 0.00
root 2012-06-14 7.00
root 2012-06-15 0.00
sa 2012-06-10 11.00
sa 2012-06-11 8.00
sa 2012-06-12 0.00
sa 2012-06-13 0.00
sa 2012-06-14 0.00
sa 2012-06-15 0.00
*/
create table #t(
value varchar(5)
)
go
insert #t
select '0001' union all
select '0004' union all
select '0002' union all
select '0023' union all
select '0016' union all
select '0005' union all
select '0008' union all
select '0009' union all
select '0007'
select * from #t
order by CONVERT(binary,'0x'+value)
/*
value
--------
0001
0002
0004
0005
0007
0008
0009
0016
0023
*/