Rey*_*yaz 3 sql sql-server sql-server-2012
请帮助您获取下表的查询
????????????????
? A B C D ?
????????????????
? N E 1 -5 ?
? N N 4 -3 ?
? N -4 6 E ?
? 3 E E -8 ?
? 1 N N N ?
????????????????
Run Code Online (Sandbox Code Playgroud)
我需要输出如下
???????????????????????????????????
? N E NegativeValues ?
???????????????????????????????????
? A 3 0 0 ?
? B 2 2 1 ?
? C 1 1 0 ?
? D 1 1 3 ?
???????????????????????????????????
Run Code Online (Sandbox Code Playgroud)
我需要得到N和E的计数以及所有列的负值.请帮忙.提前致谢
更新 此处N为NULL,E以字符串"-1E + 70"开头
尝试取消旋转,然后有条件地计算行数.
像这样的东西:
SELECT ABC,
Sum(CASE
WHEN VALS = 'n' THEN 1
ELSE 0
END) n,
Sum(CASE
WHEN VALS = 'e' THEN 1
ELSE 0
END) E,
Sum(CASE
WHEN LEFT(VALS, 1) = '-' THEN 1
ELSE 0
END) NegativeValues
FROM TABLE1
UNPIVOT (VALS
FOR ABC IN ([A],
[B],
[C],
[D]))t
GROUP BY ABC
Run Code Online (Sandbox Code Playgroud)
看看SQL Fiddle上的一个工作示例.
祝好运!
考虑到'n'值实际上是NULL并且UNPIVOT函数丢弃NULL值并且'e'值实际上是'-1e',这里是查询的更新版本:
SELECT ABC,
Sum(CASE
WHEN VALS = 'NULL' THEN 1
ELSE 0
END) n,
Sum(CASE
WHEN VALS = '-1e' THEN 1
ELSE 0
END) E,
Sum(CASE
WHEN LEFT(VALS, 1) = '-'
AND Charindex('e', VALS) = 0 THEN 1
ELSE 0
END) NegativeValues
FROM (SELECT Isnull(A, 'NULL')A,
Isnull(B, 'NULL')B,
Isnull(C, 'NULL')C,
Isnull(D, 'NULL')D
FROM TABLE1)T
UNPIVOT (VALS
FOR ABC IN ([A],
[B],
[C],
[D]))t
GROUP BY ABC
Run Code Online (Sandbox Code Playgroud)
这里是SQL Fiddle的更新链接.
编辑 使用新信息-1e实际上是科学数字,并且所有字段都是浮点类型,这是我更新的解决方案(希望最终):
SELECT ABC,
Sum(CASE
WHEN VALS = 'NULL' THEN 1
ELSE 0
END) n,
Sum(CASE
WHEN VALS LIKE '-1e+070%' THEN 1
ELSE 0
END) E,
Sum(CASE
WHEN LEFT(VALS, 1) = '-'
AND Charindex('e', VALS) = 0 THEN 1
ELSE 0
END) NegativeValues
FROM (SELECT Isnull(Cast(A AS VARCHAR(10)), 'NULL')A,
Isnull(Cast(B AS VARCHAR(10)), 'NULL')B,
Isnull(Cast(C AS VARCHAR(10)), 'NULL')C,
Isnull(Cast(D AS VARCHAR(10)), 'NULL')D
FROM TABLE1)T
UNPIVOT (VALS
FOR ABC IN ([A],
[B],
[C],
[D]))t
GROUP BY ABC
Run Code Online (Sandbox Code Playgroud)
当然是SQL Fiddle的新链接.
| 归档时间: |
|
| 查看次数: |
155 次 |
| 最近记录: |