【发布时间】:2013-02-26 16:09:32
【问题描述】:
我有以下疑问:
SELECT * FROM
(
SELECT unix_timestamp, input_raw, tag_id
from [200030].[dbo].inputs
WHERE inputs.date_time > dateadd(day,-1,getdate())
AND
(tag_id = 92164 or tag_id = 92149)
) src
pivot
(
max(input_raw)
FOR tag_id IN ([92164], [92149])
) piv
ORDER by unix_timestamp DESC
这很棒而且很有效。它给了我结果:
但是,我希望查询为我再做一件事。
每当出现“NULL”结果时,我希望查询将“NULL”替换为列中最后一个“非 NULL”值。
例如,在“92164”列中看到的第一个 NULL 将被替换为“211”。
此外,一行中可能会有多个 'NULL',因此查询需要继续沿该列向上移动,直到找到一个无 NULL。
我已经能够用 php 来完成这个。将结果放入二维关联数组并运行一个查找空值的函数,然后循环查找最后一个非空值,但如果可能的话,我真的想在 SQL 中完成这一切。我宁愿使用
while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC)){
//code
}
分配多个数组的方法。
有什么帮助吗?
谢谢
//编辑
忘记补充了,这仅适用于空值上方有任何非空值的情况。例如,如果第一行为 NULL,则可以接受。
【问题讨论】:
-
帮我理解一下,如果第 92164 列第 3 行为空,您希望它显示 207?并且您希望第 5 行的第 92164 列显示 211?
-
@supergrady 你正确理解了这个问题......如果第 1-4 行都是空值,那么它们和第 5 行将保持空值,第 7 行将是 211。
-
@Love2Learn 你是对的
标签: php sql-server performance pivot