数据对比的sql语句或者js处理

2025-02-25 10:10:26
推荐回答(2个)
回答1:

SQL SERVER里面怎么取月份日期靠你啦,不过应该是这个差不多或者用SUBSTRING。
112 stype返回的应该是yymmdd..取子串mmdd就可以了,然后做相应的格式转换(加短横)就可以了

SELECT dateId,
RIGHT(CONVERT(VARCHAR(24), date, 112), 4),
SUM(CASE WHEN tm LIKE '2007%' THEN value ELSE 0 END) AS 2007,
SUM(CASE WHEN tm LIKE '2008%' THEN value ELSE 0 END) AS 2008,
SUM(CASE WHEN tm LIKE '2008%' THEN value ELSE 0 END) AS 2009
FROM tab
GROUP BY dateId, RIGHT(CONVERT(VARCHAR(24), date, 112), 4)

回答2:

select s.dataid,s.tm,max(s.y2007) as y2007,max(s.y2008) as y2008,max(s.y2009) as y2009
from (select dataid,left(convert(varchar,tm,10),5) as tm,
y2007=
case year(tm)
when 2007 then value1
else 0
end,
y2008=
case year(tm)
when 2008 then value1
else 0
end,
y2009=
case year(tm)
when 2009 then value1
else 0
end

from [表名]) as s
group by s.dataid,s.tm

公式如上,SQL2000测试通过。
关于列名有几点要说明:
1、value貌似是关键字,改成value1
2、纯数字不能做列名,改成y2007、y2008、y2009