如果减去'NULL',如何保留原始值

时间:2017-03-21 02:28:00

标签: sql sql-server-2008-r2

我在这里有一个示例表,我想将“items out”减去“items in”但是它给了我一个null,这意味着这个项目中没有out并且我希望null应该是值“中的物品”。

|ItemCode | Qty |isIN|isOUT|
|---------|-----|----|-----|
|  1      |2    |  1 |  0  |
|---------|-----|----|-----|
|  2      |5    |  1 |  0  |
|---------|-----|----|-----|
|   3     | 1   |  1 |  0  |
|---------|-----|----|-----|
|   4     | 2   |  1 |  0  |
|---------|-----|----|-----|
| 10      | 14  |  1 | 0   |
|---------|-----|----|-----|
| 10      |  1  |  0 | 1   |
|---------|-----|----|-----|
|  10     |  1  |  0 |   1 |
|---------|-----|----|-----|
| 12      |   1 |1   | 0   |
|---------|-----|----|-----|
| 12      |   1 | 0  | 1   |
|---------|-----|----|-----|
| 13      |  1  | 1  | 0   |
|---------|-----|----|-----|
| 14      |   2 | 1  | 0   |
|---------|-----|----|-----|
| 14      | 1   |0   |1    |

我的疑问就是这个。

SELECT i.ItemCode, Sum(i.Qty)-(select Sum(Qty) from INVENTORY where isOUT = 1 and i.ItemCode = ItemCode)as Qty
FROM INVENTORY i
WHERE isIN = 1
GROUP BY i.ItemCode

结果如下:

|ItemCode | Qty |
|---------|-----|
|  1      |NULL |
|---------|-----|
|  2      |NULL |
|---------|-----|
|   3     |NULL |
|---------|-----|
|   4     |NULL | 
|---------|-----|
| 10      | 12  | 
|---------|-----|
| 12      |   0 |
|---------|-----|
| 13      | NULL|
|---------|-----|
| 14      |   1 | 
|---------|-----|

2 个答案:

答案 0 :(得分:1)

SELECT i.ItemCode, Sum(ISNULL(i.Qty,0))-(select Sum(ISNULL(Qty,0)) from INVENTORY where isOUT = 1 and i.ItemCode = ItemCode)as Qty
FROM INVENTORY i
WHERE isIN = 1
GROUP BY i.ItemCode

使用

  

ISNULL(列,值)

因此,如果该值为null,则将其视为0(或您喜欢的任何值)

答案 1 :(得分:1)

  

我这里有一个示例表,我想减去"项目"至   "

中的"项目

我认为你只想要条件聚合:

# original list
my_list = [10,50,20,'STRING',5]

# Creating temporary list with all numbers in sorted order and reverse
# reversed such that we use pop() which is efficient in time complexity
sorted_list = sorted([element for element in my_list if not isinstance(element, str)], reverse=True)

# new list to append accordingly
new_list = []

# for each element if it is string then in new list it has same position as in original list
# else if it was originally number then, we append the respective sorted number 

for index, element in enumerate(my_list):
    if isinstance(element, str):
        new_list.append(element)
    else:
        new_list.append(sorted_list.pop())
new_list       

根本不需要子查询。