“UNION ALL”不能将“列”完全一样的记录合并吗???如下图:问题一:如上图,“第一条记录”和“第三条记录”是使用“UNION ALL”关联起来的,而且这两条记录的列名完全一致。为什么这两条记录不会合并起来呢? 同时,将“01”、“02”、“03”、“04”、“05”、“06”、“07”、“08”、“10”、“11”、“12”列的数值加起来求和,作为合并后的记录的值。
问题二:“UNION ALL”不支持这样的功能吗? 如果要实现这样的功能应该怎么办??? 用什么方法,有实例可以参考吗?
问题二:“UNION ALL”不支持这样的功能吗? 如果要实现这样的功能应该怎么办??? 用什么方法,有实例可以参考吗?
FROM
(SELECT buildingno ,buildingname,buildingfunction,circuittype,unit,ISNULL([01],0) [01].....后面同理
FROM 表
WHERE 第一条数据
UNION ALL
SELECT buildingno ,buildingname,buildingfunction,circuittype,unit,ISNULL([01],0) [01].....后面同理
FROM 表
WHERE 第三条数据
)a
GROUP BY buildingno ,buildingname,buildingfunction,circuittype,unit
例如select p1,p2,p3,sum(p4) as p4,sum(p5) as p5
from (
select p1,p2,p3,p4,p5
union all
select p1,p2,p3,p4,p5
) t1
group by p1,p2,p3
操作数数据类型 NULL 对于 sum 运算符无效。我反正试过了才说的
set @CircuitType = ''''+ REPLACE(@CircuitType,',',''',''')+''''
print @CircuitType“print” 出来的值为 “ 'A','E' ”现在想判断“@CircuitType”中是否包含“ A ”应该怎样判断呢??? 请各位大侠指教。
小弟这样判断的,但是不行啊。if CHARINDEX(@CircuitType,'A')>0
谢谢大师, LIKE '%A%' 可以作为 “if”判定条件的。
select BuildingNo,BuildName,BuildingFunction,CircuitType,Unit,01,02,03,04,05,06,07,08,10,11,12,(01+02+03+04+05+06+07+08+10+11+12)
from
(
select
union all
select
union all
select
union all
select
union all
select
union all
)
group by BuildingNo,BuildName,BuildingFunction,CircuitType,Unit,01,02,03,04,05,06,07,08,10,11,12,(01+02+03+04+05+06+07+08+10+11+12)
它没有返回数字吗?难道是if CHARINDEX(@CircuitType,'A')这样吗?
SQL里没有“Split”对吧? 一般使用“Replace”处理字符串,因为没有数组。
为什么 “@DateListSum” 超过100了,再拼接字符串,字符显示不出来了,为什么?
你只定了100位,多了肯定显示不出来,变长的意思是在100以内可以变动,但是超过了就显示不了了
SQL中有没有向外变动的类型呢? 自动根据字符串的长度变长而变长。 大师
declare @DateListSum nvarchar(150)
set @DateValue='2010,2011,2012'
set @DateListSum = 'sum(isnull(' +REPLACE(@DateValue,',',',0)),sum(isnull(') +',0))' print @DateValue
print @DateListSum
print 'sum(isnull(2010,0)) 2010,sum(isnull(2011,0)) 2011,sum(isnull(2012,0)) 2012'运行结果: 2010,2011,2012
sum(isnull(2010,0)),sum(isnull(2011,0)),sum(isnull(2012,0))
sum(isnull(2010,0)) 2010,sum(isnull(2011,0)) 2011,sum(isnull(2012,0)) 2012问题: 现在的SQL语句中可以将“ 2010,2011,2012”转化为“sum(isnull(2010,0)),sum(isnull(2011,0)),sum(isnull(2012,0))” , 但是怎样转化为“sum(isnull(2010,0)) 2010,sum(isnull(2011,0)) 2011,sum(isnull(2012,0)) 2012” 呢??? 也就是作完“sum”求和后,加上原有的列名,SQL应该怎样处理呢?
要是想求和,先把NULL值处理一下
if CHARINDEX('A', @CircuitType)>0
declare @s nvarchar(100), @result nvarchar(100), @i int;set @s = 'x,y,z';
set @s = @s + ',';while (charindex(',', @s) > 0) and (len(@s) > 1)
begin
set @result = isnull(@result, '') + 'sum(isnull(' + substring(@s, 1, charindex(',', @s) - 1) + ',0)) ' + substring(@s, 1, charindex(',', @s) - 1) + ', '; set @s = substring(@s, charindex(',', @s) + 1, len(@s));
end;set @result = substring(@result, 1, len(@result) - 1);select @result;