sql Server 的 sql 語句收入

每個用戶在 從表(t) 只獲取一條 最新的 記錄。適用於一對多,但每個主表記錄只查詢一條從表記錄的情況。
addtime  -- 添加時間
userid -- 外鍵
select top 10 title from t where addtime in (select max(addtime) from t group by userid)
參考網址:
http://zhidao.baidu.com/link?url=-H1FS4dw5QTSpQQnaLTBvpIh1lgag4e6jabw2bIk7ZpTYM7n3PYl93Dhes4w3HVoOIbAvAIOcVu5RMIrBwmcwq 


// 2014-08-20 update
// 獲取某個分類下固定條數的記錄,支持排序
// 文章表 art_art, 分類字段clsid

select * from
(
select id, title, clsid, num = row_number() over(partition by clsid order by addtime desc) from art_art
where clsid in (98, 102, 20)
) as tmp
where num <= 5
 

// 2015-02-09
SQL 全文索引相關 contains(), freetext() 語法
https://msdn.microsoft.com/en-us/library/ms187787.aspx

 
// 2015-05-20
SQL in 排序
select id, job_id, username, true_name as name, course, face_image as face, sort_id
from [TABLE_NAME]
where job_id in (1,10,11,12,13,14,2394) order by charindex(',' + rtrim(cast(job_id as varchar(10))) + ',', ',1,10,11,12,13,14,2394,'), sort_id asc;
數據按照in內部的ID排序 而不是默認的混亂的排序。
最後的 sort_id asc 會進行二次排序,結果如下:(job_id安裝括號內順序,sort_id按照 asc 升序)
圖片

// 2016-04-03
// 在SQL Select 語句中使用 case when then 語句 自定義輸出內容
select
title, username, danwei, classname, puttime,
(
case [source]
when 'shzh' then '裝潢網'
when 'snzsxh' then '協會'
end
) as [source_name],
(
case [status]
when 10 then '處理中'
when 20 then '已處完成'
end
) as [status_name]
from [tablename]
where puttime > '2015-04-01' and recycle = 0
order by puttime desc

// 2016-05-10
// SQL 中的 intersect 用法
在一個多對多的關係表中, 假設有 產品表 PRD, 屬性表ATTR, 關係表 RELS
RELS表中結構 PID | AID
現在需要讀取AID 既包含 = 1 又包含 = 2 的產品ID, 單純的IN 是一種或OR的關係, 這裏需要且AND的關係, 所以先讀取=1的然後再讀取=2的, 再取交集即可
語句如下:
select id, name from PRD where id in ( select pid from rels where aid = 1 intersect select pid from rels where aid = 2 )
 

關於SQL Server將一列的多行內容拼接成一行的問題討論 (轉)

(原地址:http://www.cnblogs.com/rainman/archive/2013/05/03/3058413.html)

昨天遇到一個SQL Server的問題:需要寫一個儲存過程來處理幾個表中的數據,最後問題出在我想將一個表的一個列的多行內容拼接成一行,比如表中有兩列數據 :

類別 名稱
AAA 企業1
AAA 企業2
AAA 企業3
BBB 企業4
BBB 企業5

我想把這個表變成如下格式:

類別 名稱
AAA 企業1,企業2,企業3
BBB 企業4,企業5

一開始挺頭疼的(會了的肯定沒有這種感覺,不會那必須是頭疼啊(*^__^*) ),從網上找了點資料,算是找到一種比較簡單方便的方法吧,現在大體總結一下,供大家共同學習。

原先的表名爲Table_A,實現代碼如下:

select 
	類別, 
	名稱 = (
		stuff(
			(select ',' + 名稱 from Table_A where 類別 = A.類別 for xml path('')),
			1,
			1,
			''
		)
	) 
from Table_A as A group by 類別




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章