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