1. 程式人生 > >sql server行轉列問題終極解決

sql server行轉列問題終極解決

主要應用case語句來解決行轉列的問題

行轉列問題主要分為兩類

1)簡單的行轉列問題:

示例表:

id  sid           course  result

1   2005001 語文     80.0
2   2005001 數學     90.0
3   2005001 英語     80.0
4   2005002 語文     56.0
5   2005002 數學     69.0
6   2005002 英語     89.0

執行

select sid,語文=isnull(sum(case course when '語文' then result end),0),
   數學=isnull(sum(case course when '數學' then result end),0),
   英語=isnull(sum(case course when '英語' then result end),0)
   from result 
   group by sid
   order by sid

得出結果

sid           語文 數學 英語

2005001 80.0  90.0  80.0
2005002 56.0  69.0  89.0

2)較為複雜的行轉列

表1:course

id name

1 語文
2 數學
3 英語


表2:result

id sid          course  result

1 2005001 語文      80.0
2 2005001 數學      90.0
3 2005001 英語      80.0
4 2005002 語文      56.0
5 2005002 數學      69.0
6 2005002 英語      89.0

declare @sql varchar(8000)
set @sql='select sid'
select @[email protected]

+','+course.name+'=isnull(sum(case course when '''+course.name+''' then result end),0)'
 from course order by id 
set @[email protected]+' from result group by sid order by sid'
print @sql
exec(@sql)

得出結果

sid           語文 數學 英語

2005001 80.0  90.0  80.0
2005002 56.0  69.0  89.0

相關推薦

sql server問題終極解決

主要應用case語句來解決行轉列的問題 行轉列問題主要分為兩類 1)簡單的行轉列問題: 示例表: id  sid           course  result 1   2005001 語文     80.02   2005001 數學     90.03   200500

SQL Server 轉行

結果 name pre toolbar des null 表名 再次 arch 一、多行轉成一列(並以","隔開) 表名:A 表數據: 想要的查詢結果: 查詢語句: SELECT name , value = ( STUFF(( SELECT

查詢每個學生每門課程的成績,sql server實現

本人經常寫sql server指令碼,有時需要行轉列,這裡做個筆記。 練習指令碼 -- 學生表 CREATE TABLE student ( stuid VARCHAR(16) NOT NULL, stunm VARCHAR(20) NOT NULL, PRI

SQL Server 轉行。多成一

一、多行轉成一列(並以","隔開)表名:A表資料:想要的查詢結果:查詢語句:SELECT name , value = ( STUFF(( SELECT ',' + value FROM A

oracle 存儲過程-動態解決

pla gin sel rom con left join from blog creat 包頭 create or replace package pro_test as TYPE out_cursor IS REF CURSOR; procedure A

sql(PIVOT)與轉行(UNPIVOT)

列轉行 gif 而且 碼農 實現 score username info rect 在做數據統計的時候,行轉列,列轉行是經常碰到的問題。case when方式太麻煩了,而且可擴展性不強,可以使用 PIVOT,UNPIVOT比較快速實現行轉列,列轉行,而且可擴展性強

sql service 操作

ice pack 通過 group by img ora _id select package 通過行換列處理之後: SELECT s.AREA_NAME, max(CASE s.TYPE WHEN ‘CPU‘ THEN s.PRICE ELSE 0 end)CPU,

sql應用轉行

一、行轉列例項: 場景: 今天運營人員讓我提取每個使用者在某種交易型別下每年的交易總金額。 表結構: CREATE TABLE `ORDERS` (   `ID` int(11) NOT NULL AUTO_INCREMENT,   `USER_ID` varchar(10

SQL Server 中行 轉行

CREATE TABLE pvt (VendorID int, Emp1 int, Emp2 int,     Emp3 int, Emp4 int, Emp5 int); GO INSERT INTO pvt VALUES (1,4,3,5,4,4); INSERT INTO pvt VALUES (2,4

LINQ TO SQL 實現

表結構如下: id NAME result ----------- -------------------- ------ 1 jim 勝 2

SQL Server 動態(引數化表名、分組欄位、欄位值)

一.本文所涉及的內容(Contents) 二.背景(Contexts)   其實行轉列並不是一個什麼新鮮的話題了,甚至已經被大家說到爛了,網上的很多例子多多少少都有些問題,所以我希望能讓大家快速的看到執行的效果,所以在動態列的基礎上再把表、分組欄位、行轉列欄位、值這四個行轉列固定需要的值變成真正意義的

老生常談之SQL Server轉行)

1 --靜態的行轉列 2 --新建一個科目成績表 3 --三個欄位:學生名稱,科目,成績 4 CREATE TABLE SubjectScore 5 ( 6 StuName nvarchar(20), 7 SubjectName nvarchar(20), 8 F

SQL SERVER PIVOT與用法解釋

在資料庫操作中,有些時候我們遇到需要實現“行轉列”的需求,例如一下的表為某店鋪的一週收入情況表: WEEK_INCOME(WEEK VARCHAR(10),INCOME DECIMAL) 我們先插入一些模擬資料: INSERT INTO WEEK_INCOME

SQL

png 英語 姓名 create case when src clas 行轉列 序號 一、使用場景   當系統中有匯總和明細的需求時,一般通過SQL來實現,匯總 就是 根據條件顯示出全部的數據,明細 就是 一條匯總對應的詳細信息。   行轉列通常用於實現明細的時候。

sql內置函數pivot強大的功能

子查詢 註意 ges 中一 rom cnblogs blog 聚合函數 星期六 http://blog.csdn.net/xb12369/article/details/8149608 http://www.cnblogs.com/lwhkdash/archive/20

T-sql ,數據庫查詢分頁

tput substr between dep and alt rom img lec 1 USE [APS_Future_FT] 2 GO 3 /****** Object: StoredProcedure [dbo].[A_CrudePrice] Scr

SQL經典例子(轉載)

htm har server2 str union sdn ltrim sql ue4 行轉列問題總結 1、行轉列 ---1、最簡單的行轉列 /* 問題:假設有張學生成績表(tb)如下: 姓名 課程 分數 張三 語文 74 張三 數學 83 張三 物理 93 李

sql pivot() 和unpivot(轉行)的用法

sql clas 數據 sele core unp null col style 1、PIVOT用法(行轉列) select * from Table_Score as a pivot (sum(score) for a.name in ([語文],[數學],[外語],[

Sql的兩個小例子

SQL行轉列 所謂行轉列就是將某一個category型別的列(nx1的矩陣,實質是有m類),目標是將多行轉換成為多列(新增m列)。 例1:模擬順豐SQL小例子 ##順豐面試題(SQLite編碼實現題目) import sqlite3 conn=sqlite3.con

SQL語句實現

within sel 11g wm_concat 進行 com 10g 本地測試 from 最近在維護一個項目,出現了一下bug需要進行調試,於是把正式庫上面的代碼搬到本地庫上面,數據庫是本地的,跑項目的時候調試發現代碼裏面帶有wmsys.wm_concat函數的SQL語句