2013-07-11 101 views
-6

我想创建一个SQL查询,并格式化该查询的输出。用于格式化输出的SQL查询

我的表看起来像这样:

Time Amount Id iMId 
--------------------------------- 
    1  2500 1 4 
    3  5000 1 4 
    5  10000 1 4 
    7  20000 1 4 
    1  2500 2 8 
    3  5000 2 8 
    5  10000 2 8 
    7  20000 2 8 

我要在以下格式的输出: -

Id iMId Time1 Time2 Time3 Time4 
---------------------------------- 
1 4 1  3  5  7 
     2500 5000 10000  20000 
2 8 1  3  5   7 
     2500 5000 10000 20000 

我已经试过:

SELECT sProfileId,iMerchantId,'Day1','Day2','Day3','Day4',dAmount 
FROM (SELECT RM.sProfileId,RM.iMerchantId,RC.iDays,RC.dAmount 
     FROM tblRuleByMerchant RM 
     JOIN tblAlertRuleCummulativeData RC ON (RM.sProfileId=RC.sProfileId)) AS d 
PIVOT (max(RM.sProfileId) FOR RM.iMerchantId IN ('Day1','Day2','Day3','Day4')) piv 
+0

我假设你的意思是你想格式化输出..而不是查询。查询格式不会改变它的运行方式。 –

+0

此外,为了让您的问题得到解答,您必须向我们展示您在编写查询(查找解决方案)时的努力,否则您的问题将很有可能被降低并关闭。 –

+0

请说明你做了什么。至少2或3行将帮助我们在起点 –

回答

1

我认为Time列值是固定的,并且是1,3,5,7

下面的查询类似于你想要实现的。

select distinct T.id,T.iMid, 
    (select amount from myTable 
    where time = 1 and id = T.id and iMid = T.iMid) as Time1, 
    (select amount from myTable 
    where time = 3 and id = T.id and iMid = T.iMid) as Time2, 
    (select amount from myTable 
    where time = 5 and id = T.id and iMid = T.iMid) as Time3, 
    (select amount from myTable 
    where time = 7 and id = T.id and iMid = T.iMid) as Time4, 
    2 as level 
    from myTable T 
union All 
select distinct T.id,T.iMid,1,3,5,7,1 
    from myTable T 
order by id,level 

Here is the SQLFiddel DEMO与你在你的问题中提到类似的模式。