上次寫了個比較簡單的只有兩個欄位的例子,經要求在寫個 3 個字段的示例 ,貼上來與大家共勉一下 如果你們有更好的方法,提供一下, 感激不盡。
示例如下:
/*--drop table temp_testcol_valuetoname;
-- 建立測試表 (前提 每天每個會員只有一條記錄)
create table temp_testcol_valuetoname
(username nvarchar(50), -- 會員名
mymoney money, -- 金額
addtime datetime -- 時間
)-- 新增測試資料
insert into temp_testcol_valuetoname values('張三',10,'2013-11-01')
insert into temp_testcol_valuetoname values('張三',40,'2013-11-02')
insert into temp_testcol_valuetoname values('張三',1,'2013-11-03')
insert into temp_testcol_valuetoname values('張三',6,'2013-11-04')
insert into temp_testcol_valuetoname values('李四',40,'2013-11-02')
insert into temp_testcol_valuetoname values('李四',100,'2013-11-03')
insert into temp_testcol_valuetoname values('李四',60,'2013-11-06')
*/-- **查詢結果
-- username 1 2 3 4 6
-- 張三 10 40 1 6 0
-- 李四 0 40 100 0 60
-- 查詢結果
declare @sql nvarchar(max)='', -- 組裝的sql語句
@month varchar(7)='2013-11'; -- 需要查詢的年月(只需要改變這個值)
select @sql=@sql+ (case @sql when '' then '' else ',' end)
+'max(case day(addtime) when '+cast(d as varchar)+' then mymoney else 0 end) ['+cast(d as varchar)+']'
from (select distinct day(addtime) d from temp_testcol_valuetoname where convert(varchar(7),addtime,120)=@month) a;
set @sql='select username [username],'+@sql+' from temp_testcol_valuetoname where convert(varchar(7),addtime,120)='''+@month+''' group by username;';
exec sp_executesql @sql;
SQL Server 表字段值轉列名 示例
前幾天,同事問我怎樣把字段值轉換成欄位列,就寫了乙個最簡單的demo分享一下。如下 建立測試表以及新增測試資料 create table temp a money,b varchar 10 insert into temp a,b values 10,1點 insert into temp a,b ...
表字段的處理 Sql Server
目錄 表的建立 建立約束 檢視約束 刪除約束 插入資料 增加字段 刪除字段 create table student 學號 char 8 not null,姓名 char 8 not null,性別 char 2 not null,出生日期 date default getdate 班級 char ...
對Sql Server表字段進行修改
通用式 alter table 表名 add 欄位名 字段屬性 default 預設值 default 是可選引數 增加字段 alter table 表名 add 欄位名 smallint default 0 增加數字字段,整型,預設值為0 alter table 表名 add 欄位名 int de...