当前位置: 代码迷 >> Sql Server >> 求大神撸个SQL解决思路
  详细解决方案

求大神撸个SQL解决思路

热度:4   发布时间:2016-04-24 10:34:16.0
求大神撸个SQL
id     time                                         value              value2
001 2014-03-11 00:00:00.000 19.094000 5.402000
001 2014-03-11 00:10:00.000 18.722000 5.325000
002 2014-03-11 00:00:00.000 18.598000 5.445000
002 2014-03-11 00:10:00.000 18.880000 5.709000
003 2014-03-11 00:00:00.000 19.052000 5.935000
003 2014-03-11 00:10:00.000 19.052000 5.935000

这是我GROUP BY的一个表。。然后我想要得到

time                                               001value      001value2      002value     002value2    003value         003value2 
2014-03-11 00:00:00.000        19.094000 5.402000      18.598000 5.445000     19.052000 5.935000
2014-03-11 00:10:00.000         18.722000 5.325000       18.880000 5.709000      19.052000 5.935000
------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

求大神。。。


这个001,002,003 是动态的吗,就是可能还有004,005吗?

是的- - 


你用的是2000,还是2005.
------解决方案--------------------
IF EXISTS(SELECT NAME FROM sys.objects AS o WHERE NAME = 'test')
DROP TABLE test
GO

CREATE TABLE test(id VARCHAR(03) , [time] DATETIME , VALUE DECIMAL(10,3) , value2 DECIMAL(10,3))

GO
INSERT INTO test 
SELECT '001' , '2014-03-11 00:00:00.000' , 19.094 , 5.402 UNION ALL
SELECT '001' , '2014-03-11 00:10:00.000' , 18.722 , 5.325 UNION ALL
SELECT '002' , '2014-03-11 00:00:00.000' , 18.598 , 5.445 UNION ALL
SELECT '002' , '2014-03-11 00:10:00.000' , 18.88  , 5.709 UNION ALL
SELECT '003' , '2014-03-11 00:00:00.000' , 19.052 , 5.935 UNION ALL
SELECT '003' , '2014-03-11 00:10:00.000' , 19.052 , 5.935

GO
---执行查询-------------------------------
DECLARE @sql NVARCHAR(MAX) 

SELECT @sql = ISNULL(@sql , '') + ' sum(case when id = ''' + id + ''' then value else 0 end) as [' +id+'value]' 
+' , sum(case when id = ''' + id + ''' then value2 else 0 end) as ['+id+'value2]'+ ',' FROM test GROUP BY ID

SET @sql = 'SELECT time ,'+ left(@sql , LEN(@sql) - 1 ) + ' from test group by time'
PRINT @sql
EXEC(@sql)

/*  查询结果
time                    001value     001value2    002value    002value2   003value   003value2
----------------------- ------------ ------------ ----------- ----------- ---------- ----------
2014-03-11 00:00:00.000 19.094       5.402        18.598      5.445       19.052     5.935
2014-03-11 00:10:00.000 18.722       5.325        18.880      5.709       19.052     5.935

(2 行受影响)

 */

------解决方案--------------------
没积分发问题
A表有MODULE_NAME(模块名称)和MODULE_ID列,其中MODULE_ID为空,MODULE_NAME列为一个这样格式可能是:”1、模块列表-产品实现-献血服务-献血核查。“,也可能是“1、产品实现。”
B表(模块名称表)有ID和NAME(模块名称)列,NAME列的数据为标准信息,如“产品实现”。
数据就是这样的:A表的模块名称列里的数据包含B表的NAME的数据。
现在想通过将A表关联B表实现将B表的ID更新到A表的MODULE_ID列。
请问如何实现,谢谢。
  相关解决方案