Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
按计算列进行T-SQL排序_Sql_Tsql - Fatal编程技术网

按计算列进行T-SQL排序

按计算列进行T-SQL排序,sql,tsql,Sql,Tsql,我有一个包含以下列的表:ID、Price、ismonthyprice 考虑到以下因素,我如何选择全部并按周价格排序: if (IsMonthlyPrice = false) then Price is weekly 编辑: 我需要按周价格分类 一个月价格的周价格是:价格*12/52不确定这是否是您想要的,但可以试试: select id, case isMonthlyPrice when 'false' then (price*52/12) else price end no

我有一个包含以下列的表:
ID、Price、ismonthyprice

考虑到以下因素,我如何选择全部并按周价格排序:

if (IsMonthlyPrice = false) then Price is weekly
编辑:

我需要按周价格分类


一个月价格的周价格是:价格*12/52

不确定这是否是您想要的,但可以试试:

select 
    id,
    case isMonthlyPrice when 'false' then (price*52/12) else price end normalizedPrice
from
    yourTable
order by
    normalizedPrice

我通常将select包装成另一个。然后该列不再“计算”


可以使用两种方法对计算列进行排序。更口头的方法(未经测试的伪代码)是:

更简明的方法是:

select * from
(
select ID, CASE WHEN IsMonthlyPrice = 0 THEN Price * 52 / 12 ELSE Price END AS Price
) as derived
ORDER BY derived.Price 

您可以使用
案例
计算不同的值,具体取决于价格是每周还是每月

这将计算每天排序的大致价格(假设每月31天):

select ID, Price, IsMonthlyPrice
from TheTable
order by Price / case IsMonthlyPrice when 1 then 31.0 else 7.0 end

您不需要包含两次计算。您可以按列号订购

SELECT 
    ID, 
    Price, 
    IsMonthlyPrice, 
    CASE IsMonthlyPrice
    WHEN 1 THEN Price * 12 / 52
    ELSE price
    END
FROM [TABLE]
    order by 
        4

如果您可以添加一些示例数据和预期输出,这将非常有用。我想你需要做一些计算,从每周的价格到每月的价格。如果是,一个月有多少周?你说的“考虑到”是什么意思?你的意思是你只想要“IsMonthyPrice=false”的记录吗?或者你想先每周一次,然后每月一次?另外,该字段实际上是什么数据类型?(有一个位类型,但它不接受'false'作为值)我想选择全部并按周价格订购。但是有些价格是按月存储的,有些是按周存储的。我可能没有完全正确地理解你的观点,但理论才是最重要的。最好给这个专栏一个别名,然后按别名排序。也正是我所需要的。我只是尝试不用别名,效果很好。奇怪的是,我这么做只是出于习惯。SQL Server过去是否存在这样的情况,或者是否存在需要在order by子句中重复计算的情况?
order by
是唯一可以重复使用别名的地方,并且不能在
order by
中的表达式中使用别名。
select ID, Price, IsMonthlyPrice
from TheTable
order by Price / case IsMonthlyPrice when 1 then 31.0 else 7.0 end
SELECT 
    ID, 
    Price, 
    IsMonthlyPrice, 
    CASE IsMonthlyPrice
    WHEN 1 THEN Price * 12 / 52
    ELSE price
    END
FROM [TABLE]
    order by 
        4