如何强制我的T-SQL查询将不匹配的值输出为零?

时间:2017-12-11 09:57:37

标签: sql-server tsql

我正在使用SQL Server 2014,我有一个简单的T-SQL查询(如下所示)及其相应的输出。

use mydatabase

select *

from Table1

where ID in (101, 102, 103)

输出如下(表1中不存在ID 102):

ID   Age
101   46
103   50

我希望输出如下:

ID    Age
101   46
102    0
103   50

如果查找表中的ID不匹配,则输出省略这些ID。如何更改T-SQL查询以确保输出不匹配的ID但是为零。

3 个答案:

答案 0 :(得分:0)

如果没有包含您正在查找的值的表格,那么您可以使用join执行该操作,并在coalesce()或{{的帮助下将错配值替换为0 1}}功能

isnull()

结果:

select a.id, coalesce(t.age, 0) [Age] from <table> t
right join (
       values (101), (102), (103)
) a(id) on a.id = t.id

答案 1 :(得分:0)

如果您有两个或更多表,并且如果在一个表中找不到匹配项,则希望显示一些默认值,那么您可以在SQL中使用外部联接。

例如:

我有2个表TableA和TableB。

当我进行内部联接时,我将获得两个表中都有匹配的记录。假设我需要从两个表中选择id 1,2和3,即使TableB中不存在一个id,我希望记录为NULL,然后我可以使用这个

func User(w http.ResponseWriter, r *http.Request) {
idUser := r.URL.Query().Get("id_user")
phoneNumber := r.URL.Query().Get("phone_number")
var user User
id, err := strconv.Atoi(idUser)
if err != nil {
    fmt.Println("error converting string to int")
    return
}
user.IDUser = id
user.PhoneNumber = phoneNumber
respBody, _ := json.Marshal(user)
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusOK)
w.Write(respBody)
}

如果tableB

中没有id的匹配记录,则Age将显示为0

答案 2 :(得分:0)

if err := json.NewDecoder(r.Body).Decode(&user); err != nil {
  fmt.Println("error decoding api payload")
  return
}