最近遇到點棘手的問題,大致如下:
1、數(shù)據(jù)局格式:
企業(yè)名稱 排口名稱 監(jiān)測時間 監(jiān)測因子
a b c pH值
a b c 氨氮
a b c 化學(xué)需氧量(COD)
企業(yè)名稱、排口名稱數(shù)據(jù)都一樣,需求是把企業(yè)名稱列相同的數(shù)據(jù)顯示一行,開始覺得很簡單,做著做著覺得拼接數(shù)據(jù)太煩,然后就想能不能用sql操作。
糾結(jié)了小半天沒有寫出一個適合的sql,然后去百度了(谷歌最近大姨媽了,上不去,也沒研究咋回事),然后找到了N多種方案,最后找到一個方案。寫sql函數(shù),
sql函數(shù)的語法 大致 這樣(有問題的話,麻煩指出來,好改正......)
if exists (select * from dbo.sysobjects where id = object_id(N'dbo.函數(shù)名稱') and xtype in (N'FN', N'IF', N'TF'))--判斷該函數(shù)是否存在drop function [dbo].函數(shù)名稱GOcreate FUNCTION dbo.函數(shù)名稱()RETURNS VARCHAR(500) --必須,類型可以集資定AS BEGIN
DECLARE @SQL NVARCHAR(500) SELECT @SQL = (ISNULL(@SQL+',','') + 需要合并的列名) FROM 表名 --ISNULL 必須包含兩個參數(shù) group by 分組的列名 --可選
RETURN @SQL --最后一條必須是返回語句ENDgoselect distinct dbo.函數(shù)名稱(),列名 from 表名
然后順利解決。
之前用上面的方法,發(fā)現(xiàn)有點不夠簡潔,根據(jù)博友的提示,又重新整合了一個。
SELECT B.StuName ,LEFT(StuList,LEN(StuList)-1) as hobby FROM (SELECT StuName,(SELECT habbyName+',' FROM Habby WHERE A.habbyId like'%'+cast(Id as nvarchar(5))+'%' FOR XML PATH('')) AS StuListFROM Students A GROUP BY StuName,A.habbyId) B 這個做法不錯。
新聞熱點
疑難解答