CREATE FUNCTION f_str(
@sbbh VARCHAR(2),
@sbmc VARCHAR(10),
@cj VARCHAR(10),
@pz VARCHAR(10),
@num INT,
@Height INT)
RETURNS VARCHAR(1000)
AS
BEGIN
DECLARE @s VARCHAR(1000)
SELECT @s=ISNULL(@s + ',','') --这儿有问题
--改成? SELECT @s=ISNULL(@s,'') + ',','')
@sbbh VARCHAR(2),
@sbmc VARCHAR(10),
@cj VARCHAR(10),
@pz VARCHAR(10),
@num INT,
@Height INT)
RETURNS VARCHAR(1000)
AS
BEGIN
DECLARE @s VARCHAR(1000)
SELECT @s=ISNULL(@s + ',','') --这儿有问题
--改成? SELECT @s=ISNULL(@s,'') + ',','')
WHERE sbbh=@sbbh AND sbmc=@sbmc AND cj=@cj AND pz=@pz AND num=@num AND height=@height條件不成立為null改為
RETURN isnull(@s,'')
SELECT DISTINCT @s = ...
大哥,我已经改成SELECT DISTINCT @s = ...。但还是有点问题呀。可能我当时没有表述清楚。
下面的测试数据如下:
设备编号 设备名称 车间 品种 只数 重量 生产人员
01 磨毛机 磨毛车间 磨毛 20 200 李宁
01 磨毛机 磨毛车间 磨毛 20 200 李宁
01 磨毛机 磨毛车间 磨毛 20 200 孙悦
01 磨毛机 磨毛车间 磨毛 20 200 孙悦
运行你写的语句结果如下:
设备编号 设备名称 车间 品种 只数 重量
01 磨毛机 磨毛车间 磨毛 20 200
生产人员 李宁(我改成SELECT DISTINCT @s = ...。后运行的结果。但孙悦不会显示。) 我要求正确的运行结果是这样的。如下:设备编号 设备名称 车间 品种 只数 重量
01 磨毛机 磨毛车间 磨毛 20 200
生产人员 李宁,孙悦
请问大哥,从你写的语句如何修改成这样的效果呀!谢谢了。
IF OBJECT_ID('tb','u') IS NOT NULL
DROP TABLE tb
GO
CREATE TABLE tb(sbbh VARCHAR(2),sbmc VARCHAR(10),cj VARCHAR(10),pz VARCHAR(10),num INT,height INT,person VARCHAR(10))
INSERT tb SELECT '01', '磨毛机', '磨毛车间' , '磨毛', 20 ,200, '小明'
UNION ALL SELECT '01', '磨毛机' , '磨毛车间', '磨毛' , 20 , 200 , '小李'
UNION ALL SELECT '01', '磨毛机' , '磨毛车间' ,'磨毛' ,30 , 300 ,'小李'
UNION ALL SELECT '02', '定型机' , '定型车间' , '定型' , 40 , 400 , '小明'
UNION ALL SELECT '02', '定型机' ,'定型车间', '定型' ,40, 400 ,'小芳'
GOCREATE FUNCTION f_str(
@sbbh VARCHAR(2),
@sbmc VARCHAR(10),
@cj VARCHAR(10),
@pz VARCHAR(10),
@num INT,
@Height INT)
RETURNS VARCHAR(1000)
AS
BEGIN
DECLARE @s VARCHAR(1000)
SELECT distinct @s=ISNULL(@s + ',','') + person FROM tb
WHERE sbbh=@sbbh AND sbmc=@sbmc AND cj=@cj AND pz=@pz AND num=@num AND height=@height
RETURN @s
END
GO
SELECT *,ID=IDENTITY(INT) INTO #1 FROM
(SELECT DISTINCT sbbh,sbmc,cj,pz,num,height FROM tb) a
SELECT ID=IDENTITY(INT),* INTO #2 FROM
(SELECT DISTINCT sbbh,sbmc,cj,pz,num,height,dbo.f_str(sbbh,sbmc,cj,pz,num,height) v FROM tb) a
GO
SELECT sbbh,sbmc,cj,pz,num,height,idx=0,id FROM #1
UNION
SELECT '生产人员',v,NULL,NULL,NULL,NULL,idx=1,id FROM #2
ORDER BY ID,idx
/*
01 磨毛机 磨毛车间 磨毛 20 200 0 1
生产人员 小明,小李 NULL NULL NULL NULL 1 1
01 磨毛机 磨毛车间 磨毛 30 300 0 2
生产人员 小李 NULL NULL NULL NULL 1 2
02 定型机 定型车间 定型 40 400 0 3
生产人员 小明,小芳 NULL NULL NULL NULL 1 3*/
GO
DROP FUNCTION f_str
GO
DROP TABLE #1,#2
GO
呵呵,您的SQL版本,老版如2000的null判断好象有问题,有几种情况下就是不对的。