标签: case

T-SQL Where子句案例语句优化(StoredProc的可选参数)

我一直在争夺这一个.我有一个存储过程,它接受3个用于过滤的参数.如果传入特定值,我想对其进行过滤.如果传入-1,请全部给我.

我试过以下两种方式:

第一种方式:

SELECT field1, field2...etc  
FROM my_view  
WHERE  
parm1 = CASE WHEN @PARM1= -1 THEN parm1  ELSE @PARM1 END  
AND parm2 = CASE WHEN @PARM2 = -1 THEN parm2  ELSE @PARM2 END  
AND parm3 = CASE WHEN @PARM3 = -1 THEN parm3  ELSE @PARM3 END
Run Code Online (Sandbox Code Playgroud)

第二种方式:

SELECT field1, field2...etc  
FROM my_view  
WHERE  
(@PARM1 = -1 OR parm1 = @PARM1)  
AND (@PARM2 = -1 OR parm2 = @PARM2)  
AND (@PARM3 = -1 OR parm3 = @PARM3)  
Run Code Online (Sandbox Code Playgroud)

我读到某处,第二种方式会短路,如果是真的话,永远不会评估第二种方式.我的DBA说它强制进行表扫描.我还没有验证这一点,但在某些情况下似乎运行速度较慢.

此视图选择的主表有大约150万条记录,并且视图继续加入大约15个其他表以收集大量其他信息.

这两种方法都很慢......把我从瞬间带到2-40秒的任何地方,这在我的情况下是完全不可接受的.

是否有更好的方法不涉及将其分解为特定vs …

t-sql sql-server case query-optimization where-clause

16
推荐指数
2
解决办法
2万
查看次数

Perl Switch声明

如果没有匹配的案例块,有没有办法运行代码块?例如:

switch($a) {

  case // {}
  case // {}
  ...
  # DO SOMETHING IF NONE OF THE ABOVE CASES WERE MATCHED
}
Run Code Online (Sandbox Code Playgroud)

else 不是我想要的,因为它只适用于最后一个案例块.

perl case switch-statement conditional-statements

16
推荐指数
4
解决办法
5万
查看次数

如何在scala构造函数中声明类型别名?

如果我有一个类在其构造函数中采用元组和其他值,例如:

class Foo(a: Int, b: String, c: (Int, String)) 
Run Code Online (Sandbox Code Playgroud)

如何使用抽象类型以轻量级方式为元组提供更具描述性的名称(不将其包装在新类中):

class Foo(a: Int, b: String, c: Dave) 
Run Code Online (Sandbox Code Playgroud)

我不确定如何在范围内引入类型别名(或者如果这是最好的事情):

type Dave = (Int, String) 
Run Code Online (Sandbox Code Playgroud)

是否存在以这种方式定义类型的约定(或者我应该定义案例类并包装所有内容......)?

我很欣赏它在很多情况下没有意义,但如果我真的只是在寻找一个更具描述性的名字,那么它有可能吗?

谢谢!

types scala class case abstract

16
推荐指数
1
解决办法
9607
查看次数

使用别名在ORDER BY中添加Postgres CASE

我有以下查询在Postgres 9.1中很有用:

SELECT users.id, GREATEST(
 COALESCE(MAX(messages.created_at), '2012-07-25 16:05:41.870117'),
 COALESCE(MAX(phone_calls.created_at), '2012-07-25 16:05:41.870117')
) AS latest_interaction
FROM users LEFT JOIN messages ON users.id = messages.user_id
LEFT JOIN phone_calls ON users.id = phone_calls.user_id
GROUP BY users.id
ORDER BY latest_interaction DESC
LIMIT 5;
Run Code Online (Sandbox Code Playgroud)

但我想做的是这样的事情:

SELECT users.id, GREATEST(
 COALESCE(MAX(messages.created_at), '2012-07-25 16:05:41.870117'),
 COALESCE(MAX(phone_calls.created_at), '2012-07-25 16:05:41.870117')
) AS latest_interaction
FROM users LEFT JOIN messages ON users.id = messages.user_id
LEFT JOIN phone_calls ON users.id = phone_calls.user_id
GROUP BY users.id
ORDER BY
  CASE WHEN(
    latest_interaction > '2012-09-05 16:05:41.870117')
  THEN …
Run Code Online (Sandbox Code Playgroud)

sql postgresql case sql-order-by aggregate-functions

16
推荐指数
1
解决办法
2万
查看次数

生成的Doctrine模型尊重大小写,但生成的Yaml却没有

刚开始使用Doctrine ORM for PHP(v1.1.5)并遇到意想不到的事情.

我正在使用db(MySQL 4)生成模型:

Doctrine::generateModelsFromDb($pathToModels);
Run Code Online (Sandbox Code Playgroud)

然后使用以下方法从模型生成YAML:

Doctrine::generateYamlFromModels($pathToSchema . '/schema.yml', $pathToModels);
Run Code Online (Sandbox Code Playgroud)

在生成的模型中,列名称(如在中所定义hasColumn())对字段使用与db中相同的大小写.都好.

但是在生成的YAML中,列名都是小写的,与模型中的情况无关.

似乎没有任何可用的选项generateYamlFromModels(),我可以想象用来调整它.我应该在某个地方设置一些其他属性,可能是在连接级别,还是在经理级别等?可能是个bug吗?

任何想法都非常感激.谢谢,欢呼!

php orm yaml doctrine case

15
推荐指数
1
解决办法
1264
查看次数

Python:获取存储在Windows中的文件名大小写?

尽管Windows不区分大小写,但它确实保留了文件名中的大小写.在Python中,有没有办法获得带有大小写的文件名,因为它存储在文件系统中?

例如,在Python程序中我有filename ="texas.txt",但是想要知道它实际上存储在文件系统上的"TEXAS.txt",即使这对于各种文件操作来说是无关紧要的.

python windows filenames case

15
推荐指数
2
解决办法
3032
查看次数

tsql:是否可以在select中执行嵌套的case语句?

我如何在SQL查询的select子句中包含嵌套的if语句?我知道使用case时条件然后X else y结束但是你如何以相同的方式为记录集中的每个记录做一个嵌套的.

if x.boy is not null then 
   x.boy 
else if x.girl is not null
   then x.girl 
else if x.dog is not null 
   then x.dog
else 
    x.cat 
Run Code Online (Sandbox Code Playgroud)

这是我的尝试:

SELECT top 10
        id,
        case when x.boy <> NULL then 
            x.boy
        else case when  x.girl <> NULL 
            x.girl
                else case when  x.dog <> NULL 
            x.dog
                else x.cat 

        end as Who 
from house x
Run Code Online (Sandbox Code Playgroud)

它是否正确?

t-sql case

15
推荐指数
2
解决办法
2万
查看次数

MySQL SELECT CASE WHEN返回null

who

wid--name-------father---mother  
1----Daisy------David----Liza  
2----Jenny------Joe------Judy  
3----Meggy------Mike-----Manuela  
4----Sarah------Joe------Judy  
5----Chelsea----Bill-----Hillary  
6----Cindy------David----Liza    
7----Kelly------Joe------Judy 
Run Code Online (Sandbox Code Playgroud)

ages

aid---whoid---age  
1-----1--------0  
2-----2--------0  
3-----3-------14  
4-----4-------30  
5-----5-------22  
6-----6-------17  
7-----1-------18  
Run Code Online (Sandbox Code Playgroud)

我希望该列表成为结果:

id---name------age  
1----Meggy-----14  
2----Cindy-----17  
3----Daisy-----18 (Selected data that bigger than 0)  
4----Chelsea---22  
5----Sarah-----30  
6----Jenny-----30 (Her age is 0 on ages table and Sarah's age with same father and mother)  
7----Kelly-----30 (No data on ages table and Sarah's age with same father and mother)
Run Code Online (Sandbox Code Playgroud)

我试过那个查询:

SELECT 
    *,  
    (CASE age  
        WHEN '0' THEN (
            SELECT age 
            FROM ages a 
            LEFT JOIN who …
Run Code Online (Sandbox Code Playgroud)

mysql select case sql-order-by

15
推荐指数
1
解决办法
6万
查看次数

函数中的PostgreSQL CASE用法

我们不能CASE在SQL SELECT语句之外使用条件吗?

例如:

CASE 
  WHEN old.applies_to = 'admin' THEN _applies_to = 'My Self'
  ELSE _applies_to = initcap(old.applies_to)
END
 _summary = _summary || '<li>Apply To: ' || _applies_to || '</li>';
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

ERROR:  syntax error at or near "_summary"
LINE 86: _summary = _summary || '<li>Apply To: ' || _applies ...
Run Code Online (Sandbox Code Playgroud)

postgresql conditional case plpgsql

15
推荐指数
1
解决办法
2万
查看次数

MySQL使用Sum和Case

我正在尝试创建一个使用ASP.NET连接到MySQL数据库的GridView.数据如下所示.

BusinessUnit    OrderDate      Canceled
UnitA           1/15/2013          N
UnitA           10/1/2013          N
UnitB           10/15/2013         N
UnitB           10/22/2013         N
UnitB           10/22/2013         N
Run Code Online (Sandbox Code Playgroud)

根据上面的记录,我希望结果如下所示

BusinessUnit  TodaysOrders   ThisMonthsOrders  ThisYearsOrders
UnitA              0                1                2
UnitB              2                3                3
Run Code Online (Sandbox Code Playgroud)

我目前的代码如下.它给了我错误(关于DatabaseName.sum的东西不存在.检查函数名称解析和解析'部分......)

Select  
    SUM (CASE WHEN (OrderDate)=DATE(NOW()) THEN 1 ELSE 0 END) AS TodaysOrders,
    SUM (CASE WHEN YEAR(OrderDate) = YEAR(CURDATE()) AND MONTH(OrderDate) = MONTH(CURDATE()) THEN 1 ELSE 0 END) AS ThisMonthsOrders,
    SUM (CASE WHEN YEAR(main_order_managers.creation_date) = YEAR(CURDATE()) THEN 1 ELSE 0 END) AS ThisYearsOrders 
Run Code Online (Sandbox Code Playgroud)

代码继续

FROM OrderTable WHERE OrderTable.Canceled. …
Run Code Online (Sandbox Code Playgroud)

mysql sql sum case

15
推荐指数
1
解决办法
4万
查看次数