2016-08-23 25 views
2

之前在SQL中使用旋转功能我得到这个记录结构SQL查询时字段不解决

enter image description here

使用透视后:

enter image description here

这是我的SQL查询

SELECT 

      FromHubID, 
      FromHubName, 
      ToHubID, 
      SUM([1 - 100]) AS [1 - 100], 
      SUM([101 - 250]) AS [101 - 250], 
      SUM([251 - 500]) AS [251 - 500], 
      SUM([501 - 1000]) AS [501 - 1000] 

      FROM 
    (SELECT 
      AccountGroupID, 
      FromHubID, 
      FromHubName, 
      ToHubID, 
      T_ID, 
      [1 - 100], 
      [101 - 250], 
      [251 - 500], 
      [501 - 1000] 
    FROM 
    (
     SELECT 
       AG.AccountGroupID 
      ,AG.FromHubID 
      ,FH.Hub_Name AS FromHubName 
      ,AG.ToHubID 
      ,AG.T_ID 
      ,CONVERT(VARCHAR , [MinWeight]) + ' - ' + CONVERT(VARCHAR ,[MaxWeight]) AS slot 
      ,[Rate] 

      FROM 
       [CourierDev].[dbo].[AccountGroupQuotation] AS AG 
       INNER JOIN HubMaster AS FH ON FH.Hub_Id = AG.FromHubID 
      WHERE 
       accountgroupid = 1 

    )Sourcetable 

    PIVOT 
    (
      Sum(Rate)   
      FOR slot IN ( [1 - 100], 
         [101 - 250], 
         [251 - 500], 
         [501 - 1000]) 
    )AS AGQuotationList 
    )AS tbl 

    GROUP BY 
      FromHubID, 
      FromHubName, 
      ToHubID 

我的问题是字段的插槽,它的价值是无法修复在这里,我添加静态场枢纽语法和选择语法 对于这个特殊的记录,但是如何管理数量时槽的价值和插槽的数量价值不是固定的?

例如 如果只有2记录的类型[1 - 100],[101 - 250]然后我想两个枢对于只

回答

1

可以使用动态SQL:

DECLARE @columns nvarchar(max), 
     @sql nvarchar(max) 

SELECT @columns = COALESCE(@columns,'') +','+QUOTENAME(slot) 
FROM #YourTable 
GROUP BY slot 

SELECT @sql = N' 
SELECT FromHubID, 
     FromHubName, 
     ToHubID 
     '[email protected]+' 
FROM #YourTable 
PIVOT (
    SUM(Rate) FOR slot IN ('+STUFF(@columns,1,1,'')+') 
) as pvt' 

EXEC sp_executesql @sql 

输出:

FromHubID FromHubName  ToHubID 1 - 100 101 - 250 251 - 500 501 - 1000 
5   BARODA R. O. 1  1  2   3   4 
5   BARODA R. O. 5  5  6   7   8 
+0

这里插槽是2费尔德的concatination所以我用QUOTENAME(CONVERT(VARCHAR,[MinWeight])+ ' - ' + CONVERT(VARCHAR,[MaxWeight]))的d GROUP BY CONVERT(VARCHAR,[MinWeight])+' - '+ CONVERT(VARCHAR,[MaxWeight])它在这里工作,但是当我使用'+ @ columns +'作为插槽和SUM(速率) STUFF(@ columns,1,1,'')+')它给错误无效列'插槽'如何解决这个问题? –

+0

简单的方法是在摆放某些临时表之前放置所获得的内容,然后使用我提供的代码。 – gofr1

+0

完美!其工作感谢你.. –