1. sql語句列轉行
我整理的行轉列的問題:
--創建tb表
createtabletb(姓名varchar(10),課程varchar(10),分數int)
insertintotbvalues('張三','語文',74)
insertintotbvalues('張三','數學',83)
insertintotbvalues('張三','物理',93)
insertintotbvalues('李四','語文',74)
insertintotbvalues('李四','數學',84)
insertintotbvalues('李四','物理',94)
go
select*Fromtb
--SQLSERVER2000靜態行轉列
select姓名as姓名,
max(case課程when'語文'then分數elsenullend)語文,
max(case課程when'數學'then分數elsenullend)數學,
max(case課程when'物理'then分數elsenullend)物理
fromtb
groupby姓名
--SQLSERVER2000動態SQL,指課程不止語文、數學、物理這三門課程。(以下同)
declare@sqlvarchar(8000)
set@sql='select姓名'
select@sql=@sql+',max(case課程when'''+課程+'''then分數else0end)['+課程+']'
from(selectdistinct課程fromtb)asa
set@sql=@sql+'fromtbgroupby姓名'
exec(@sql)
--SQLSERVER2005靜態SQL。
select*from(select*fromtb)apivot(max(分數)for課程in(語文,數學,物理))b
--SQLSERVER2005動態SQL。
declare@sqlvarchar(8000)
select@sql=isnull(@sql+'],[','')+課程fromtbgroupby課程
set@sql='['+@sql+']'
exec('select*from(select*fromtb)apivot(max(分數)for課程in('+@sql+'))b')
希望對你的學習有幫助。
2. 在SQL中用UNION這個字句,只能用於多個語句執行,但是不能用於多表是吧謝謝
當然可以多個表,只要欄位的順序和名字一樣就可以,如果不一樣可以給as一樣了
比如
select fd1 as a,fd2 as b from biaoA uinon select df1 as a, df2 as b from biaoB
3. sql:兩個select語句查詢出的結果如何拼接到一起
select * from(SELECT 配料日期,供貨商,規格,貨品名稱,染料用量 FROM 染料表 UNION ALL SELECT 配料日期,供貨商,規格,貨品名稱,助劑用量 FROM 助劑表)
4. SQL:怎樣將多個表的查詢結果放到一張表裡
uinon/union all
5. SQL一次插入多條數據..
先將數據插入一個臨時表,之後再插入這個臨時表
insert 臨時(CPU,PRICE)( 'Intel酷睿i32100(盒)',705)
.....
INSERT INTO 正式表 (CPU,PRICE) SELECT CPU,PRICE FROM 臨時表
6. SQL 中with的用法
SQL 中with的用法如下:
CTE 之後必須跟隨引用部分或全部 CTE 列的 SELECT、INSERT、UPDATE 或 DELETE 語句。也可以在 CREATE VIEW 語句中將 CTE 指定為視圖中 SELECT 定義語句的一部分。
可以在非遞歸 CTE 中定義多個 CTE 查詢定義。定義必須與以下集合運算符之一結合使用:UNION ALL、UNION、INTERSECT 或 EXCEPT。
CTE 可以引用自身,也可以引用在同一WITH子句中預先定義的 CTE。不允許前向引用。
不允許在一個 CTE 中指定多個WITH子句。例如,如果 CTE_query_definition 包含一個子查詢,則該子查詢不能包括定義另一個 CTE 的嵌套的WITH子句。
不能在 CTE_query_definition 中使用以下子句:
COMPUTE 或 COMPUTE BY
ORDER BY(除非指定了 TOP 子句)
INTO
帶有查詢提示的 OPTION 子句
FOR XML
FOR BROWSE
(6)sqluinon擴展閱讀
定義和使用遞歸 CTE 指南
下列指南適用於定義遞歸 CTE 的情況:
遞歸 CTE 定義至少必須包含兩個 CTE 查詢定義,一個定位點成員和一個遞歸成員。可以定義多個定位點成員和遞歸成員;但必須將所有定位點成員查詢定義置於第一個遞歸成員定義之前。所有 CTE 查詢定義都是定位點成員,但它們引用 CTE 本身時除外。
定位點成員必須與以下集合運算符之一結合使用:UNION ALL、UNION、INTERSECT 或 EXCEPT。在最後一個定位點成員和第一個遞歸成員之間,以及組合多個遞歸成員時,只能使用 UNION ALL 集合運算符。
定位點成員和遞歸成員中的列數必須一致。
遞歸成員中列的數據類型必須與定位點成員中相應列的數據類型一致。
遞歸成員的 FROM 子句只能引用一次 CTE expression_name。
在遞歸成員的 CTE_query_definition 中不允許出現下列項:
7. sql中with as的用法
你可以查詢CTE,即common_table_expression,創建個臨時表。
用途:1,以前的子查詢可以用它代替了,看上去很明了;2,也即他的優點,可以遞歸調用:select uinon all select cte
用法你可以F1。
注意:1,一般我們寫 ;with cte as , 因為若他不是批處理的開始則加;分號。
2,一個with中 不同的表用,逗號分開,如
;with cet1 as ()
,cte2 as()
cte3 as()
8. SQL怎樣動態查詢按月生成的表數據
難點在於如何動態生成每月的日期數據,使用以下語句可以生成每月日期數據,然後再關聯需要顯示的其他數據。
生成每月動態數據代碼:
declare@BeginMonthasVarchar(7)--需要生成的年份和月份,例如:2015-01
set@BeginMonth='2015-03'
selecttop(datediff(d,@BeginMonth+'-01',dateadd(m,1,@BeginMonth+'-01')))@BeginMonth+'-'+cast((row_number()over(orderbya.object_id))asvarchar(2))asIDfromsys.all_columnsa,sys.all_columnsb
9. sql server 2005 遠程連接問題,請高手看看!
打開程序列表選擇sqlserver
2005外圍應用配置管理器,打開『服務和連接的外圍應用配置器』,然後選擇遠程連接,選擇『本地連接和遠程連接』-同時使用tcp/ip和named
pipes
試試,不行的在打開sqlserver
配置管理器,看看各種服務配置的是否正確。都在開始,程序列表的sqlserver2005的程序列表下。看看sqlserver配置管理器的協議(命名管道設置是否正確,還要看外圍應用配置器理是否選擇支持命名管道,就是上面的操作)
10. SQL Server 2005連不上Server的問題
當然不行了,如果你用客戶端組件連接,要提前配置好ODBC。
然後在資料庫引擎里要開啟TCP/IP連接。
還要在外圍適配器里調整你的連接屬性。
重啟引擎以後,才能生效。太麻煩了。。。