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