2013-10-02 16 views
-1

我有一个结果从SELECT语句中设置,我怎么能不带任何分隔符分割一列 这是我的结果分体式无定界符字符串中TSQL

Size TCount TDevice 
2  5  E01 
4.5 3  W02E01 

我想有这个

Size TCount TDevice 
2  5  E 
2  5  0 
2  5  1 
4.5  3  W 
4.5  6  0  (we have 2 times of 0) 
4.5  3  2 
4.5  3  1  

谢谢

回答

1
;with cte as 
(
select Size,TCount, 
     substring(TDevice, 1, 1) as Chars, 
     stuff(TDevice, 1, 1, '') as TDevice 
    from t1 
    union all 
    select Size,TCount, 
     substring(TDevice, 1, 1) as Chars, 
     stuff(TDevice, 1, 1, '') as TDevice 
    from cte 
    where len(TDevice) > 0 
) 
select distinct Size,sum(TCount),Chars 
from cte 
group by Size,Chars 

SQL Fiddle

优势:它不需要任何User defined function (UDF)创建。

2

您可以加入一个辅助数字表。我使用spt_values进行演示,但您应该使用create a permanent one

WITH Nums 
    AS (SELECT number 
     FROM master..spt_values 
     WHERE type = 'P' 
       AND number BETWEEN 1 AND 1000), 
    Result(Size, TCount, TDevice) 
    AS (SELECT 2, 5,'E01' 
     UNION ALL 
     SELECT 4.5,3,'W02E01') 
SELECT Size, 
     COUNT(*) * TCount    AS TCount, 
     SUBSTRING(TDevice, number, 1) AS TDevice 
FROM Result 
     JOIN Nums 
     ON Nums.number <= LEN(TDevice) 
GROUP BY Size, 
      TCount, 
      SUBSTRING(TDevice, number, 1)