相关疑难解决方法(0)

SQLite相当于ISNULL(),NVL(),IFNULL()或COALESCE()

我想避免在我的代码中进行如下的许多检查:

myObj.someStringField = rdr.IsDBNull(someOrdinal) 
                            ? string.Empty 
                            : rdr.GetString(someOrdinal);
Run Code Online (Sandbox Code Playgroud)

我想我可以让我的查询通过执行以下操作来处理空值:

SELECT myField1, [isnull](myField1, '') 
FROM myTable1
WHERE myField1 = someCondition
Run Code Online (Sandbox Code Playgroud)

我虽然使用SQLite,但似乎没有认识到这个isnull功能.我也试过其他数据库中的一些公认的那些等效(NVL(),IFNULL()COALESCE()),但SQLite的似乎不认识任何人.

有没有人有任何建议或知道更好的方法来做到这一点.不幸的是,数据库没有所有字段的默认值.另外,LEFT JOIN在某些情况下我需要使用一些子句,其中返回的某些字段将为null,因为LEFT JOIN表中的匹配记录将不存在.

.net sqlite dbnull

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

在sql server中的COUNT内过滤

可能重复:
COUNTIF的SQL等效项()

我可以在COUNT本身中加入某种过滤机制,我不想在查询的WHERE或JOIN中使用它(因为它是大型查询的一部分,其中还有其他列,我不想受到哪里的影响并加入条件).

例如,我可以在SUM中使用case

SUM(CASE WHEN work_status IN ('V','L') THEN shift_total_hours ELSE 0 END),
Run Code Online (Sandbox Code Playgroud)

我也可以在COUNT中执行类似的操作,这样我就可以只计算特定的行数了

这样的事情:

COUNT(CASE WHEN work_status IN ('V','L') THEN <should come in count> ELSE <exclude from count> END)
Run Code Online (Sandbox Code Playgroud)

非常感谢.

sql-server

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

SQL Countif函数

我有一张如下表

Type of Station | Broadcast Management
----------------+-------------------------
Full Power      | Sinclair Broadcast Group
Full Power      | Sinclair Broadcast Group
LPTV cable      | Sinclair Broadcast Group
LPTV no cable   | Sinclair Broadcast Group
Run Code Online (Sandbox Code Playgroud)

现在我想执行一个查询,结果如下所示

Broadcast Management       | Full Power | LPTV cable | LPTV no cable
---------------------------+------------+------------+--------------
Sinclair Broadcast Group   |  2         |     1      |  1
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮我如何写这个查询

sql

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

关于聚合函数的Where子句条件

我有以下简单的查询,

SELECT US_LOGON_NAME as Username, 
COUNT(I.IS_ISSUE_NO) as Issues
FROM ISSUES I JOIN USERS U ON I.IS_ASSIGNED_USER_ID = U.US_USER_ID
WHERE I.IS_RECEIVED_DATETIME BETWEEN 20110101000000 AND 20110107000000
GROUP BY U.US_LOGON_NAME; 
Run Code Online (Sandbox Code Playgroud)

我想在选择列表中添加额外的COUNT()函数,但在某些条件下强加它们.这是以某种方式用CASE()语句完成的吗?我尝试在选择列表中放置Where子句,但似乎不允许这样做.我不确定这里是否真的需要子查询,但我不这么认为.

例如,我想要一个COUNT()函数,它只计算某个范围内的问题,然后计算另一个范围内的问题或其他各种条件等:

 SELECT US_LOGON_NAME as Username, 
 COUNT(I.IS_ISSUE_NO (condition here)
 COUNT(I.IS_ISSUE_NO (a different condition here)
Run Code Online (Sandbox Code Playgroud)

等等...

仍按登录名称分组.

谢谢.

sql t-sql sql-server

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

使用 dbplyr 进行数据库计算

我有一个非常简单的问题,会产生错误。示例将清除这一点。

library(odbc)
library(DBI)
library(dplyr)
library(dbplyr)

con <- dbConnect(odbc(), "myDSN")

tbl_test <- tibble(ID = c("A", "A", "A", "B", "B", "B"),
                   val = c(1, 2, 3, 4, 5, 6),
                   cond = c("H", "H", "A", "A", "A", "H"))

dbWriteTable(con, "tbl_test", tbl_test, overwrite = TRUE)
Run Code Online (Sandbox Code Playgroud)

将简单表写入数据库后,我在 db 中添加到表的链接,并尝试使用正常工作的简单条件总和。但是会遇到错误。

db_tbl <- tbl(con, in_schema("dbo", "tbl_test"))

db_tbl %>% 
  group_by(ID) %>% 
  summarise(sum = sum(val, na.rm = TRUE),
            count_cond = sum(cond == "H", na.rm=TRUE),
            sum_cond = sum(val == "H", na.rm=TRUE))

Error: <SQL> 'SELECT  TOP 10 "ID", SUM("val") AS "sum", …
Run Code Online (Sandbox Code Playgroud)

database r r-dbi dbplyr

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

标签 统计

sql ×2

sql-server ×2

.net ×1

database ×1

dbnull ×1

dbplyr ×1

r ×1

r-dbi ×1

sqlite ×1

t-sql ×1