缩短SQL中的长时函数

时间:2019-07-17 13:21:38

标签: sql sql-server

我有一个关于大小写函数的问题,那么我有291种不同的情况,然后想在一个数组中点一下,并查看数组,这给了我答案。

我想将case语句的291行更改为1。

我正在使用OrderDetails表在https://www.w3schools.com/sql/trymysql.asp?filename=trysql_case上尝试该示例

SELECT OrderID, Quantity,
CASE WHEN Quantity in (12,10,5) THEN Quantity in (1,2,3)
ELSE null
END AS QuantityText
FROM OrderDetails;

我希望此显示;如果数量为12,则显示1 如果数量为10,则显示2 如果数量为5,则显示3

目前的输出是 如果数量为12,则显示0 如果数量为10,则显示0 如果数量为5,则显示0

2 个答案:

答案 0 :(得分:4)

我认为一个更合适的解决方案是构建VALUES的列表并进行查找:

SELECT OrderDetails.OrderID, OrderDetails.Quantity, Lookup.QuantityText
FROM OrderDetails
LEFT JOIN (VALUES
    (12, 1),
    (10, 2),
    ( 5, 3)
) AS Lookup(Quantity, QuantityText) ON OrderDetails.Quantity = Lookup.Quantity

由于值列表太大,因此应将其转换为实际表。

答案 1 :(得分:2)

现在在答案中显示这个可能更容易。

正如我们许多人所说,您想要的是一个查询表。让我们采用一个过于简化的public class ViewActivity extends BaseActivity { @BindView(R.id.lastNameEdt) EditText lastNameEdt; @BindView(R.id.firstNameEdt) EditText firstNameEdt; @BindView(R.id.middleNameEdit) EditText middleNameEdit; User userModel; <----- @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_layout); userModel = new User(); userModel.firstName = lastNameEdt.getText.toString(); } 表达式:

CASE

相反,您将创建一个表,并像这样插入值:

CASE Quantity WHEN 12 THEN '1'
              WHEN 10 THEN '2'
              WHEN 8 THEN '3'
END AS QuanityText

然后,您可以通过CREATE TABLE dbo.QuantityLookup (Quantity int, QuantityText varchar(5)); --As it had a name like text, I assumed it should be a varchar INSERT INTO dbo.QuantityLookup VALUES(12,'1'),(10,'2'),(8,'3'); 或子查询在查询中引用它:

JOIN