如题,公司现在的SQL语句如下
SELECT top 1000000000 tt.员工编号, tt.员工姓名, tt.车间名称, tt.设备编号,tt.设备名称,tt.产品编码,tt.规格型号,tt.图番,tt.工序编码, tt.工序名称,
SUM(tt.A班合格数) AS A班合格数, SUM(tt.A班不良数) AS A班不良数, SUM(tt.A班总数) AS A班总数,
SUM(tt.A班重量) AS A班重量,  
SUM(tt.B班合格数) AS B班合格数, SUM(tt.B班不良数) AS B班不良数, SUM(tt.B班总数) AS B班总数, 
SUM(tt.B班重量) AS B班重量, 
SUM(tt.AB合格数) AS AB合格数, SUM(tt.AB不良数) AS AB不良数, SUM(tt.AB总数) AS AB总数, 
SUM(tt.AB班重量) AS AB班重量, 
CAST(ROUND(SUM(ISNULL(tt.AB合格数, 0)) / SUM(ISNULL(tt.AB总数, 0)) * 100, 2) AS VARCHAR(100)) + '%' AS AB合格率, 
CAST(ROUND(SUM(ISNULL(tt.AB不良数, 0)) / SUM(ISNULL(tt.AB总数, 0)) * 100, 2) AS VARCHAR(100)) + '%' AS AB不良率 ,sum(tt.AB班重量) as 一号,200 as 二号
FROM (
   SELECT t1.cPsn_Num AS 员工编号, t1.cPsn_Name AS 员工姓名, t1.cDepName AS 车间名称,t1.SpID as 产品编码,
t1.cinvstd as 规格型号,t1.cinvname as 图番,t1.SCNO as 工序编码, 
t1.SCName AS 工序名称, t1.csb_num as 设备编号,t1.csb_name as 设备名称,
ISNULL(t2.A班合格数, 0) AS A班合格数, ISNULL(t3.A班不良数, 0) AS A班不良数, 
ISNULL(t2.A班重量, 0) AS A班重量, ISNULL(t1.A班总数, 0) AS A班总数, 
ISNULL(t4.B班合格数, 0) AS B班合格数, ISNULL(t5.B班不良数, 0) AS B班不良数,
ISNULL(t4.B班重量, 0) AS B班重量,ISNULL(t1.B班总数, 0) AS B班总数,
ISNULL(t6.AB合格数, 0) AS AB合格数, ISNULL(t7.AB不良数, 0) AS AB不良数, 
ISNULL(t6.AB班重量, 0) AS AB班重量,ISNULL(t1.AB总数, 0) AS AB总数  
FROM (
   SELECT s.cPsn_Num, p.cPsn_Name,
SUM(cast(s.cFieldBody2_HC as  int)) AS A班总数,
SUM(cast(s.cFieldBody4_HC as  int)) AS B班总数,
SUM(cast(s.cFieldBody5_HC as  FLOAT)) AS A班重量,
SUM(cast(s.cFieldBody6_HC as FLOAT)) AS B班重量,
SUM(SpNum) AS AB总数,scp.SCNO, scp.SCName, 
d.cDepName, s.SCID,s.cfieldbody2_hc,s.cfieldbody4_hc,s.spicid,s.csb_num,e.csb_name,scp.SpID,f.cinvname,f.cinvstd 
         FROM HC_SalaryPriceInputCount s 
        INNER JOIN dbo.WA_psn p ON s.cPsn_Num = p.cPsn_Num 
        INNER JOIN dbo.HC_SalaryChoseProc scp ON s.SCID = scp.SCID 
        INNER JOIN dbo.Department d ON scp.OCID = d.cDepCode
        INNER JOIN dbo.HC_Sb e ON s.csb_num = e.csb_num
        INNER JOIN dbo.Inventory f ON f.cinvcode = scp.SpID
 
         WHERE 1 = 1 AND s.SpicDate>='2013-6-21' AND s.SpicDate<='2013-7-21' 
         GROUP BY s.cPsn_Num, p.cPsn_Name, scp.SCNO,scp.SCName, d.cDepName,s.csb_num,e.csb_name,scp.SpID,f.cinvstd,f.cinvname,
          s.SCID,s.spicid,s.cfieldbody2_hc,s.cfieldbody4_hc,s.cfieldbody5_hc,s.cfieldbody6_hc) t1 
       LEFT JOIN 
         (SELECT s.cPsn_Num, SUM(cast(s.cFieldBody2_HC as  int)) AS A班合格数, SUM(cast(s.cFieldBody5_HC as FLOAT)) AS A班重量,s.spicid 
           FROM HC_SalaryPriceInputCount s 
            WHERE ISNULL(s.SPItem2, 1.0) = 1.0 AND s.SpicDate>='2013-6-21' AND s.SpicDate<='2013-7-21' 
             GROUP BY s.cPsn_Num, s.spicid) t2 ON t1.cPsn_Num = t2.cPsn_Num AND t1.spicid = t2.spicid
             LEFT JOIN (
          SELECT s.cPsn_Num, SUM(cast(s.cfieldbody2_hc as  int)) AS A班不良数, s.spicid 
            FROM HC_SalaryPriceInputCount s 
             WHERE ISNULL(SPItem2, 1.0) <> 1.0 AND s.SpicDate>='2013-6-21' AND s.SpicDate<='2013-7-21' 
             GROUP BY s.cPsn_Num, s.spicid) t3 ON t1.cPsn_Num = t3.cPsn_Num AND t1.spicid = t3.spicid
       LEFT JOIN 
        (SELECT s.cPsn_Num, SUM(cast(s.cFieldBody4_HC as  int)) AS B班合格数,SUM(cast(s.cFieldBody6_HC as FLOAT)) AS B班重量, s.spicid 
           FROM HC_SalaryPriceInputCount s 
            WHERE ISNULL(s.SPItem2, 1.0) = 1.0 AND s.SpicDate>='2013-6-21' AND s.SpicDate<='2013-7-21' 
            GROUP BY s.cPsn_Num, s.spicid) t4 ON t1.cPsn_Num = t4.cPsn_Num AND t1.spicid = t4.spicid 
       LEFT JOIN (
         SELECT s.cPsn_Num, SUM(cast(s.cfieldbody4_hc as  int)) AS B班不良数, s.spicid 
           FROM HC_SalaryPriceInputCount s 
           WHERE ISNULL(SPItem2, 1.0) <> 1.0 AND s.SpicDate>='2013-6-21' AND s.SpicDate<='2013-7-21' 
           GROUP BY s.cPsn_Num, s.spicid) t5 ON t1.cPsn_Num = t5.cPsn_Num AND t1.spicid = t5.spicid
       LEFT JOIN (
         SELECT s.cPsn_Num, SUM(SpNum) AS AB合格数,SUM(cast(s.cFieldBody5_HC as FLOAT)+cast(s.cFieldBody6_HC as FLOAT)) AS AB班重量, s.spicid 
           FROM HC_SalaryPriceInputCount s 
             WHERE ISNULL(s.SPItem2, 1.0) = 1.0 AND s.SpicDate>='2013-6-21' AND s.SpicDate<='2013-7-21' 
              GROUP BY s.cPsn_Num, s.spicid) t6 ON t1.cPsn_Num = t6.cPsn_Num AND t1.spicid = t6.spicid 
       LEFT JOIN (
         SELECT s.cPsn_Num, SUM(SpNum) AS AB不良数, s.spicid 
          FROM HC_SalaryPriceInputCount s 
           WHERE ISNULL(SPItem2, 1.0) <> 1.0 AND s.SpicDate>='2013-6-21' AND s.SpicDate<='2013-7-21' 
        GROUP BY s.cPsn_Num, s.spicid) t7 ON t1.cPsn_Num = t7.cPsn_Num AND t1.spicid = t7.spicid) tt 
WHERE 1 = 1 GROUP BY tt.员工编号,tt.员工姓名,tt.车间名称,tt.设备编号,tt.设备名称,tt.产品编码,tt.规格型号,tt.图番,tt.工序编码,tt.工序名称 ORDER BY tt.员工编号查询结果:现在要在后面加上"1号","2号"...到"30号"的列,并且把上表中的"AB总数"按照 HC_SalaryPriceInputCount.SpicDate 中的时间对应赋值到加的列中。
实现下面的效果:小弟在线急等希望哪位大大麻烦给个思路或方法,谢谢!!SQL

解决方案 »

  1.   

    看你这个查询这么复杂,建议你使用中间临时表暂存数据,然后再做下一步处理.后面加上"1号","2号"...到"30号"的列
    那么应该是:SELECT  tt.员工编号, tt.员工姓名, tt.车间名称, tt.设备编号,tt.设备名称,tt.产品编码,tt.规格型号,tt.图番,tt.工序编码, tt.工序名称, 
    .......
    sum(case when day(HC_SalaryPriceInputCount.SpicDate)=1 then 数量 else 0 end) as [1],
    sum(case when day(HC_SalaryPriceInputCount.SpicDate)=2 then 数量 else 0 end) as [2],
    ........
    一直到30
    FROM
    临时表如果你觉得这样写麻烦,就用动态sql语句
    参考:
    http://blog.csdn.net/hdhai9451/article/details/5026933   
      

  2.   

    如何根据上面查询到的创建临时表呢?我在前面直接加上select * into #temp from (*上面的查询语句*)当是报错了。