hangisi?Fark aşağıdakilerden
SUM(ISNULL(Sales,0)) AS Sales,
ISNULL(SUM(Sales),0) AS Sales,
doğrudur Yada ikisinin doğru mu?
hangisi?Fark aşağıdakilerden
SUM(ISNULL(Sales,0)) AS Sales,
ISNULL(SUM(Sales),0) AS Sales,
doğrudur Yada ikisinin doğru mu?
ikisi. boş bir sonuç kümesinde bir sorgu çalıştırıyorsanız dışında aynı dönmek
WITH Sales(Sales) AS
(
SELECT 1
)
SELECT
SUM(ISNULL(Sales,0)) AS Sales,
ISNULL(SUM(Sales),0) AS Sales
FROM Sales
WHERE 1=0
iade
Sales Sales
----------- -----------
NULL 0
SUM(ISNULL(Sales,0))
sürümü, NULL
toplanmasıyla ilgili ANSI UYARILARINI önler.
Diğer bir fark, ISNULL(SUM(Sales),0)
sonuç sütununun veri türünün null olarak kabul edilmemesidir.
birincisi her Satış alanı
SUM yukarı diyor ve saha NULL ise, sıfır olarak ona iyi davran.
ikinci Toplamı kadar satış alanını diyor ve toplam NULL ise (bu konuda uyardı olacak rağmen),
Ancak SUM() komutu NULL atlar ... yerine sıfır rapor ilki
bu deneyin hata mesaj almak etmemenizi neden olur böylece:
DECLARE @table TABLE
(
id INT IDENTITY,
Alborz INT
)
INSERT INTO @table
SELECT 1
UNION ALL
SELECT 1
UNION ALL
SELECT 1
UNION ALL
SELECT 1
UNION ALL
SELECT 1
UNION ALL
SELECT NULL
SELECT ISNULL(SUM(Alborz), 0)
FROM @table
SELECT SUM(ISNULL(Alborz, 0))
FROM @table
DELETE FROM @table
SELECT ISNULL(SUM(Alborz), 0)
FROM @table
SELECT SUM(ISNULL(Alborz, 0))
FROM @table
Sen 21, 21, 0, ve NULL elde edersiniz. Boşları işlemek istemiyorsanız, ISNULL (SUM (X), 0) yoludur.
Evet bir fark var. Yanılmıyorsam Eğer
5 + NULL = NULL
böylece ilk vaka
SUM(ISNULL(Sales,0)) AS Sales
0'a boş değerini değiştirmek istiyorum ve daha sonra ikinci durumda
ISNULL(SUM(Sales),0) AS Sales,
ise 5
dönecekti ki bunları topladığınızda kelimenin S kullanımı üzerinde aynı verilerde
güzel @martinsmith –
boş dönecekti biralar? Sales_CTE İLE (SalesAndNulls) AS ( SEÇ 1 UNION SEC BOŞ ) SUM (ISNULL (SalesAndNulls, 0)) Sales1 AS ISNULL SEÇ (SUM (SalesAndNulls), 0) Sales2 OLARAK Sales_CTE DAN Satış1 = 1 Satış2 = 1 Uyarı: Boş değer, bir toplu işlem veya başka bir SET işlemi tarafından yok edilir. (etkilenen 1 satır (lar)) – Alborz
@Alborz - Evet o 'Sales2' sürümden ANSI UYARI bulunuyor. Sen couse 'ISNULL (SUM (ISNULL (SalesAndNulls, 0)), 0) yapabilirdi ayarladığınız boş sonuca 0'' dönmek ve herhangi bir uyarı görmüyor istiyorsa Sales3' AS. –