当前位置: 代码迷 >> Sql Server >> SQL语句可以实现每列数据行数不一样的淘选效果吗
  详细解决方案

SQL语句可以实现每列数据行数不一样的淘选效果吗

热度:75   发布时间:2016-04-24 09:59:45.0
SQL语句可以实现每列数据行数不一样的筛选效果吗
刚刚解除sql语句不久,现遇到如下问题:
比如对10列数据进行筛选,数据正、负、零都有。现在想实现筛选出所有大于0的数,不知道sql语句该如何写呢?
还有,我在想 SQL的筛选结果是不是每列的数据行数必须一样,如果是的话,那对于以上问题,每列大于0的数可能都一样,是不是就无法实现筛选了,或者筛选的时候以最多行数的列为标准,其他列不足行数全部赋予0,不知道能不能实现?
如果可以,希望知道的大神帮帮忙!谢了~
------解决思路----------------------
既然对列值是否在同一行不关心,做行列转换好了。
--以3列为例
WITH test(Col1,Col2,Col3) AS (
    SELECT -101,-102,-103 UNION ALL
    SELECT -104,-105,   0 UNION ALL
    SELECT -107,-108, 109 UNION ALL
    SELECT -110,   0,-112 UNION ALL
    SELECT -113,   0,   0 UNION ALL
    SELECT -116,   0, 118 UNION ALL
    SELECT -119, 120,-121 UNION ALL
    SELECT -122, 123,   0 UNION ALL
    SELECT -125, 126, 127 UNION ALL
    SELECT    0,-129,-130 UNION ALL
    SELECT    0,-132,   0 UNION ALL
    SELECT    0,-135, 136 UNION ALL
    SELECT    0,   0,-139 UNION ALL
    SELECT    0,   0,   0 UNION ALL
    SELECT    0,   0, 145 UNION ALL
    SELECT    0, 147,-148 UNION ALL
    SELECT    0, 150,   0 UNION ALL
    SELECT    0, 153, 154 UNION ALL
    SELECT  155,-156,-157 UNION ALL
    SELECT  158,-159,   0 UNION ALL
    SELECT  161,-162, 163 UNION ALL
    SELECT  164,   0,-166 UNION ALL
    SELECT  167,   0,   0 UNION ALL
    SELECT  170,   0, 172 UNION ALL
    SELECT  173, 174,-175 UNION ALL
    SELECT  176, 177,   0 UNION ALL
    SELECT  179, 180, 181 
)
 SELECT Value --,ColNo
   FROM test
UNPIVOT (Value FOR ColNo IN (Col1,Col2,Col3)
        )AS u
  WHERE Value > 0

      Value
-----------
        109
        118
        120
        123
        126
        127
        136
        145
        147
        150
        153
        154
        155
        158
        161
        163
        164
        167
        170
        172
        173
        174
        176
        177
        179
        180
        181

------解决思路----------------------
SQL 最终显示的结果肯定是每一行都具有相同的列数,并且数据类型兼容。

--以3列为例
WITH test(Col1,Col2,Col3) AS (
    SELECT -101,-102,-103 UNION ALL
    SELECT -104,-105,   0 UNION ALL
    SELECT -107,-108, 109 UNION ALL
    SELECT -110,   0,-112 UNION ALL
    SELECT -113,   0,   0 UNION ALL
    SELECT -116,   0, 118 UNION ALL
    SELECT -119, 120,-121 UNION ALL
    SELECT -122, 123,   0 UNION ALL
    SELECT -125, 126, 127 UNION ALL
    SELECT    0,-129,-130 UNION ALL
    SELECT    0,-132,   0 UNION ALL
  相关解决方案