sql – 取消组合效果?

前端之家收集整理的这篇文章主要介绍了sql – 取消组合效果?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一组动态的数据X:
  1. ----------------------------------
  2. x.id | x.allocated | x.unallocated
  3. ----------------------------------
  4. foo | 2 | 0
  5. bar | 1 | 2
  6. ----------------------------------

我需要得到Y的结果(顺序是不重要的):

  1. ----------------------------------
  2. y.id | y.state
  3. ----------------------------------
  4. foo | allocated
  5. foo | allocated
  6. bar | allocated
  7. bar | unallocated
  8. bar | unallocated
  9. ----------------------------------

我有一个基于UTF的解决方案,但我正在寻找超效率,所以我想知道是否有一种基于语句,非程序性的方式来获得这种“取消组合”的效果

感觉就像一个不透明,但我的大脑现在无法到达那里.

解决方法

使用sql Server 2005,UNPIVOTCTE,您可以尝试类似的东西
  1. DECLARE @Table TABLE(
  2. id VARCHAR(20),allocated INT,unallocated INT
  3. )
  4.  
  5. INSERT INTO @Table SELECT 'foo',2,0
  6. INSERT INTO @Table SELECT 'bar',1,2
  7.  
  8. ;WITH vals AS (
  9. SELECT *
  10. FROM
  11. (
  12. SELECT id,allocated,unallocated
  13. FROM @Table
  14. ) p
  15. UNPIVOT (Cnt FOR Action IN (allocated,unallocated)) unpvt
  16. WHERE Cnt > 0
  17. ),Recurs AS (
  18. SELECT id,Action,Cnt - 1 Cnt
  19. FROM vals
  20. UNION ALL
  21. SELECT id,Cnt - 1 Cnt
  22. FROM Recurs
  23. WHERE Cnt > 0
  24.  
  25. )
  26. SELECT id,Action
  27. FROM Recurs
  28. ORDER BY id,action

猜你在找的MsSQL相关文章