sql單豎
❶ sql查詢橫轉豎顯示
--建立測試數據
create table tb1
(
id varchar(20) not null,
value varchar(20) not null
)
go
insert into tb1
select '1','aa'
union all
select '1','bb'
union all
select '2','aaa'
go
--由於你這表裡沒有主健,可以用來做標識用,可以先生成一個臨時表,並加上自增欄位px用來做唯一標識列
select px=IDENTITY(INT,1,1),id,value
INTO #temptb
from tb1
go
select * from #temptb
go
--動態SQL
declare @sql varchar(8000)
set @sql = 'select'
select @sql = @sql + ',max(case px when ' +CONVERT(varchar(4),px)+ ' then value else '''' end) [' + id + ']'
from (select * from #temptb) a
set @sql = STUFF(@sql,7,1,' ') + ' from #temptb'
exec(@sql)
go
--靜態SQL
select max(case px when 1 then value else '' end) [1],
max(case px when 2 then value else '' end) [1],
max(case px when 3 then value else '' end) [2]
from #temptb
go
--刪除測試數據
DROP TABLE #temptb
go
DROP TABLE tb1
返回:
(所影響的行數為 3 行)
(所影響的行數為 3 行)
px id value
1 1 aa
2 1 bb
3 2 aaa
(所影響的行數為 3 行)
1 1 2
aa bb aaa
1 1 2
aa bb aaa
(所影響的行數為 1 行)
❷ SQL 如何查詢時 橫著的數據 豎著顯示
看你表結構是什麼樣的吧,最徹底的方法是把表結構就改成 姓名,科目,分數。如果表結構是 姓名,數學,語文,英語 不能變,又一定要顯示成那樣,就只好用union拼一下了,比如 select 姓名,'數學' as 科目,數學 as 分數 from 表 union select 姓名,'語文' as 科目,語文 as 分數 from 表 union select 姓名,'英語' as 科目,英語 as 分數 from 表。
❸ SQL中內容都為字元型的豎版表轉橫版,如何實現
Word默認為一節,而一節的頁面格式是相同的,若想把一個WORD文件中的每一頁隨意設置成橫版或是豎版,必須將其設置為單獨一節,這樣就可以單獨設置了。
假設有一個10頁文檔,想讓其中第3頁為橫板,設置步驟:
1、將游標放在第3的首位置,單擊頁面布局---->分隔符---->分節符---->下一頁,如圖所示;
2、將游標放在第3頁的尾部,重復上面的操作上,使第3頁成為單獨一節;
3、游標放在第3頁,單擊頁面布局---->紙張方向---->橫向即可,如圖所示。
❹ SQL 橫排變豎排的問題
給例子遠比你貼代碼快,
SELECT name,
SUM(CASE subject WHEN '語文' THEN Result ELSE 0 END),
SUM(CASE subject WHEN '數學' THEN Result ELSE 0 END),
SUM(CASE subject WHEN '物理' THEN Result ELSE 0 END)
FROM tb
GROUP BY Name
❺ SQL 豎列 轉換橫列的問題
使用CASE來處理。
select 編號, sum( 第一季度第一次施肥量) 第一季度第一次施肥量, sum( 第一季度第二次施肥量) 第一季度第二次施肥量, sum( 第二季度第一次施肥量) 第二季度第一次施肥量
from
(
select 編號
case when 季度=1 and 施肥次數=1 then 施肥量 else null end 第一季度第一次施肥量,
case when 季度=1 and 施肥次數=2 then 施肥量 else null end 第一季度第二次施肥量,
case when 季度=2 and 施肥次數=1 then 施肥量 else null end 第二季度第一次施肥量
from 表
) a
group by a.編號
❻ 如何將sql語句搜索的結果進行橫豎轉換
我幫你找個demo
DROPTABLE#tb
createtable#tb([品號]int,[日期]varchar(5),[數量]int)
insert#tb
select1001,'06-08',11unionall
select1001,'06-09',12unionall
select1001,'06-10',13unionall
select1001,'06-11',14unionall
select1001,'06-12',15
DECLARE@sqlNVARCHAR(MAX),@colListNVARCHAR(MAX)
SET@colList=STUFF((SELECT','+QUOTENAME([日期])FROM#tbGROUPBY[日期]ORDERBY[日期]FORXMLPATH('')),1,1,'')
SET@sql=N'
select*from#tba
pivot
(max([數量])for[日期]in('+@colList+'))b
'
EXEC(@sql)
http://bbs.csdn.net/topics/390542752
❼ SQL中,有個豎杠表示意思如下第一行最右邊,還有那個<>表示啥意思可以不要嘛
<>表示可選項,
|表示分隔,或者的意思
就是說上面一句話代表兩句話,
ALTER TABLE table_name ADD column_name data_type;
ALTER TABLE table_name MODIFY column_name data_type;
❽ SQL數據橫列變豎列
以下方法適用於任意多的科目:
--先建立函數,功能是根據給出的姓名,到表中去查找所選科目及成績並橫向列示出來.
CREATE FUNCTION getcoldata
(@XM VARCHAR(18))
RETURNS varchar(1000)
AS
BEGIN
DECLARE @deli VARCHAR(2)
set @deli=' '
declare @f1 varchar(100),@F2 DECIMAL(12,1),@result varchar(1000),@sn0 int
set @result=''
declare ddcursor cursor for select 選修科目,成績 from 表名 where 姓名=@XM order by 選修科目
open ddcursor
fetch next from ddcursor into @f1,@F2
while @@fetch_status!=-1
begin
set @result=@result+@deli+isnull(@f1,'')+':'+ISNULL(CONVERT(VARCHAR,@F2),'')
fetch next from ddcursor into @f1,@F2
end
close ddcursor
deallocate ddcursor
return (@result)
end
GO
--使用方法:
select 姓名,科目及成績=dbo.getcoldata(姓名) from (SELECT DISTINCT 姓名 from 表名) a
結果是這樣的
姓名 科目與成績
張三 計算機:75 高等數學:80 物理:77
李四 高等數學:55 微積分:87
王五 語文:78
=============
我這么看您的問題:
1.查詢是用來輸出的,不是用來統計的:您的這種結果即使用分開欄位也是很不容易統計的,要想統計還是原表比較方便.
就是說:這種查詢結果更方便輸出\查看,原表更方便於作統計.
所以,我勸您,比較科學的作法是保留原表,可以方便的作出包括本查詢在內的各種查詢.而您如果只保留查詢後的表,即使用欄位是分開的,那麼將很難再作其它統計和查詢.因為數據太不規范.
2.可以輸出各門分開的EXCEL表:如果您想輸出到EXCEL表,您要以把函數中的分隔符改成逗點或製表符(CHAR(9)),直接存成CSV或XLS文檔就成了.
3.完全按照您的結果也能輸出.但今天我沒空了,給你個提示:
先看看我以前的回答中,有一些是關於加序號的,加上序號後就好說了.
===========
加到200分,我就開始為您作分開欄位的查詢.(辦法我知道,但是很麻煩啊)
===============================================
與您的要求完全相同的查詢:
為了清楚,先建立一個查詢,給每人的科目加序號,如果不理解,執行一下SELECT * FROM MYVIEWNAME就知道了:
=====================
視圖改一下:
create view myviewname
as
select 姓名,科目,成績,序號=(select count(1) from tablename a where a.姓名=b.姓名 and a.科目>=b.科目) from
(select * from tablename where 狀態='有效') --以子查詢替換了TABLENAME,夠直觀吧?
b --視圖加上了序號欄位
go
然後,這就是您要的查詢,根據每人所選科目的最大數,可以無限向後延伸,加入科目6,科目7等:
select a.姓名,
科目1=isnull(t1.科目,''),
成績1=isnull(t1.成績,''),
科目2=isnull(t2.科目,''),
成績2=isnull(t2.成績,''),
科目3=isnull(t3.科目,''),
成績3=isnull(t3.成績,''),
科目4=isnull(t4.科目,''),
成績4=isnull(t4.成績,''),
科目5=isnull(t5.科目,''),
成績5=isnull(t5.成績,'')
from (SELECT DISTINCT 姓名 from tablename) a
left join myviewname t1 on t1.姓名=a.姓名 and t1.序號=1
left join myviewname t2 on t2.姓名=a.姓名 and t2.序號=2
left join myviewname t3 on t3.姓名=a.姓名 and t3.序號=3
left join myviewname t4 on t4.姓名=a.姓名 and t4.序號=4
left join myviewname t5 on t5.姓名=a.姓名 and t5.序號=5
好了,加到200分再選擇正確答案!
❾ sql 裡面怎麼把豎表變成橫表
SELECT 姓名
,'數學'=MAX(CASE 課程 WHEN '數學' THEN 分數 ELSE 0 END)
,'語文'=MAX(CASE 課程 WHEN '語文' THEN 分數 ELSE 0 END)
,'英語'=MAX(CASE 課程 WHEN '英語' THEN 分數 ELSE 0 END)
FROM TB
GROUP BY 姓名
--或者
SELECT 姓名,
,'數學'=SUM(CASE 課程 WHEN '數學' THEN 分數 ELSE 0 END)
,'語文'=SUM(CASE 課程 WHEN '語文' THEN 分數 ELSE 0 END)
,'英語'=SUM(CASE 課程 WHEN '英語' THEN 分數 ELSE 0 END)
FROM TB
GROUP BY 姓名
❿ SQL 如何查詢時 豎著的數據 橫著顯示
你這個是將縱表轉換為橫表,例如如下數據:
'wangming', 'shuxue', 100
'wangming', 'yuwen', 90
'wangming', 'yingyu', 140
可以使用如下語句處理:
select a.v_name,a.v_score shuxue,b.v_score yuwen,c.v_score yingyu from temp_1 a,temp_1 b,temp_1 c
where a.v_name=b.v_name
and a.v_name=c.v_name
and a.v_name='wangming'
and a.v_course='shuxue'
and b.v_course='yuwen'
and c.v_course='yingyu';