刚刚解除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