sql-server - TSQL:从一组具有最低正值的列中选择

标签 sql-server sql-server-2005 tsql

示例架构:

RowID    Quantity    ModifiedPrice    GroupPrice    CustomPrice    SalePrice
----------------------------------------------------------------------------
1        5           20.00            0             15.00          17.00
2        2           14.00            7.00          22.00          0
3        9           10.00            10.00         0              11.00

基于此示例表,我希望能够以最有效/最简单的方式在四个 *Price 列之间选择最低的非零值。

示例输出:

RowID    Quantity    EndPrice
------------------------------
1        5           15.00
2        2           7.00
3        9           10.00

有关额外信息,数据库是 SQL Server 2005。

最佳答案

SELECT  RowId, Quantity,
        (
        SELECT  MIN(price)
        FROM    (
                SELECT  ModifiedPrice AS price
                UNION ALL
                SELECT  GroupPrice
                UNION ALL
                SELECT  CustomPrice
                UNION ALL
                SELECT  SalePrice
                ) qi
        WHERE   price > 0
        )
FROM    mytable

这比一堆 CASE 语句更具可读性。

但是请注意,这大约是 CASE 语句的 4 倍。

这是解析并产生正确结果的测试脚本:

CREATE TABLE #t_prices
        (
        RowID INT NOT NULL,
        Quantity INT NOT NULL,
        ModifiedPrice FLOAT NOT NULL,
        GroupPrice FLOAT NOT NULL,
        CustomPrice FLOAT NOT NULL,
        SalePrice FLOAT NOT NULL
        )

INSERT
INTO    #t_prices
VALUES  (1, 5, 20.00, 0, 15.00, 17.00)
INSERT
INTO    #t_prices
VALUES  (2, 2, 14.00, 7.00, 22.00, 0)
INSERT
INTO    #t_prices
VALUES  (3, 9, 10.00, 10.00, 0, 11.000)


SELECT  RowId, Quantity,
        (
        SELECT  MIN(price)
        FROM    (
                SELECT  ModifiedPrice AS price
                UNION ALL
                SELECT  GroupPrice
                UNION ALL
                SELECT  CustomPrice
                UNION ALL
                SELECT  SalePrice
                ) qi
        WHERE   price > 0
        )
FROM    #t_prices

关于sql-server - TSQL:从一组具有最低正值的列中选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1043662/

相关文章:

mysql - 如何使用 C#.NET Winform 应用程序从 mysql 数据库返回多个结果集

sql-server-2005 - 执行计划中的 "Query cost"是如何工作的?

sql-server - SQL转换日期时间并减去小时

sql - 如果索引列不同,则对一列的值求和?

c# - SQL Server 中数据更改时自动刷新应用程序

sql-server - SQLServer 在单个语句中编写 union

sql-server - Management Studio 如何知道保存我的 T-SQL 注释?

sql - 查找不包含任何 NULL 值的组

sql - 带有子表的自引用表

sql-server - 使用具有滚动总和的 SQL Over 语句