線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2118
推到 Plurk!
推到 Facebook!

sql 如何統計 "" 與null值

缺席
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-06-30 09:24:34 IP:61.71.xxx.xxx 未訂閱
請問各位 下列的語法統計出來有null值與""(空字串), 如何可以將這兩項以sql合在一起統計 select DEPTNO, COLOR, SPEC, sum(COUNTS) as TOTCOUNT from D100 where PARTNO= :iPARTNO and (SPEC is null or SPEC="") group by DEPTNO, COLOR SPEC 結果出來為 [CODE] A1 白 "" 50 // ""代表空字串, 非NULL值, 電腦中看是空白 A1 白 NULL 10 // NULL代表無值, 電腦中直接反應是NULL 我希望結果如下如果 A1 白 60 謝謝!
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-06-30 10:10:08 IP:210.65.xxx.xxx 未訂閱
Hi P.D. 大大,    試試這樣寫,在 SQL Server 2000 上可以 Work:
SELECT  DEPTNO,
        COLOR,
        ISNULL(SPEC,'') AS SPEC,
        SUM(COUNTS) AS TOTCOUNT 
FROM    D100 
WHERE   PARTNO = :IPARTNO 
AND     (SPEC IS NULL OR SPEC='') 
GROUP BY
        DEPTNO, 
        COLOR,
        ISNULL(SPEC,'')
---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ----------------------------------
------
Fishman
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-06-30 23:26:43 IP:61.71.xxx.xxx 未訂閱
感謝 Fishman 指教,  我忘了說, 我是用 INTERBASE, 沒有 ISNULL的用法, 倒是有CAST(), 但 GROUP BY 後面無法接 CAST()用法, 所以也行不通    select DEPTNO, COLOR, CAST(SPEC AS CHARACTER) AS SPEC, sum(COUNTS) as TOTCOUNT from D100 where PARTNO= :iPARTNO and (SPEC is null or SPEC="") group by DEPTNO, COLOR, CAST(SPEC AS CHARACTER) AS SPEC 結果是紅色部份不支援
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-07-01 08:16:12 IP:210.65.xxx.xxx 未訂閱
Hi P.D. 大大,    試試這樣
SELECT  DEPTNO, 
        COLOR, 
        CAST(SPEC AS CHARACTER) AS SPEC, 
        SUM(COUNTS) AS TOTCOUNT 
FROM    D100 
WHERE   PARTNO= :IPARTNO 
AND    (SPEC IS NULL OR SPEC="") 
GROUP BY 
        DEPTNO, 
        COLOR, 
        CAST(SPEC AS CHARACTER)
---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ----------------------------------
------
Fishman
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-07-01 12:41:38 IP:203.204.xxx.xxx 未訂閱
引言: Hi P.D. 大大, 試試這樣
SELECT  DEPTNO, 
        COLOR, 
        CAST(SPEC AS CHARACTER) AS SPEC, 
        SUM(COUNTS) AS TOTCOUNT 
FROM    D100 
WHERE   PARTNO= :IPARTNO 
AND    (SPEC IS NULL OR SPEC="") 
GROUP BY 
        DEPTNO, 
        COLOR, 
        CAST(SPEC AS CHARACTER)
---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ---------------------------------- < face="Verdana, Arial, Helvetica"> 謝謝, 我上面有提到, 使用 GROUP BY 不接受 CAST()的語法!
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-07-01 13:30:39 IP:210.65.xxx.xxx 未訂閱
Hi P.D. 大大,    抱歉,我沒用過 InterBase,敬請見諒!    我參考了以下討論    http://delphi.ktop.com.tw/topic.php?topic_id=49221 更改如下,不知是否可行?
SELECT  DEPTNO, 
        COLOR, 
        SPEC || '' AS SPEC, 
        SUM(COUNTS) AS TOTCOUNT 
FROM    D100 
WHERE   PARTNO= :IPARTNO 
AND    (SPEC IS NULL OR SPEC="") 
GROUP BY 
        DEPTNO, 
        COLOR, 
        SPEC || ''
歹勢!亂槍打鳥! ---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ----------------------------------
------
Fishman
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-07-01 18:42:41 IP:61.71.xxx.xxx 未訂閱
Hi, Fishman! 你忘了前面已經打了好幾槍, 鳥早都飛光了, 所以亂槍打不到鳥囉! 不過還是很感謝你多次的幫忙, 我目前的解決方法是改成 兩組sql, 一組是 where SPEC is NULL, 另一組是 where SPEC='' 都會再把贡組的值加起來就可以達成了, 只是還是很想探討一下, 一段的 sql 是否還有方法可以解決(除了自建 udf function外)
懷舊的人
高階會員


發表:28
回覆:152
積分:141
註冊:2003-01-08

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-07-02 14:28:38 IP:211.78.xxx.xxx 未訂閱
這樣好嗎?
SELECT DEPTNO,COLOR,'' AS SPEC,SUM(COUNTS) AS TOTCOUNT
FROM D100
WHERE
  PARTNO = :IPARTNO
AND
  (SPEC IS NULL OR SPEC = '')
GROUP BY DEPTNO,COLOR,''
UNION
SELECT DEPTNO,COLOR,SPEC,SUM(COUNTS) AS TOTCOUNT
FROM D100
WHERE
  PARTNO = :IPARTNO
AND
  (SPEC IS NOT NULL AND SPEC <> '')
GROUP BY DEPTNO,COLOR,SPEC
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-07-03 13:04:33 IP:61.71.xxx.xxx 未訂閱
引言: 這樣好嗎?
SELECT DEPTNO,COLOR,'' AS SPEC,SUM(COUNTS) AS TOTCOUNT
FROM D100
WHERE
  PARTNO = :IPARTNO
AND
  (SPEC IS NULL OR SPEC = '')
GROUP BY DEPTNO,COLOR,''
UNION
SELECT DEPTNO,COLOR,SPEC,SUM(COUNTS) AS TOTCOUNT
FROM D100
WHERE
  PARTNO = :IPARTNO
AND
  (SPEC IS NOT NULL AND SPEC <> '')
GROUP BY DEPTNO,COLOR,SPEC
SORRY! 我試了 IBCONSOLE 系統中, 並不支援 紅色的寫法, 我用的是FIREBIRD 1.5 謝謝!
shunaarom
一般會員


發表:8
回覆:34
積分:18
註冊:2003-07-02

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-07-04 02:57:52 IP:220.134.xxx.xxx 未訂閱
引言: Hi, Fishman! 你忘了前面已經打了好幾槍, 鳥早都飛光了, 所以亂槍打不到鳥囉! 不過還是很感謝你多次的幫忙, 我目前的解決方法是改成 兩組sql, 一組是 where SPEC is NULL, 另一組是 where SPEC='' 都會再把贡組的值加起來就可以達成了, 只是還是很想探討一下, 一段的 sql 是否還有方法可以解決(除了自建 udf function外)
使用 inner join
懷舊的人
高階會員


發表:28
回覆:152
積分:141
註冊:2003-01-08

發送簡訊給我
#11 引用回覆 回覆 發表時間:2005-07-04 16:02:11 IP:211.78.xxx.xxx 未訂閱
1. 抱歉,我原以為只是提供探討可行的方法。 2. 我直覺認為應該可行,所以我寫了一段語法並且在 INTERBASE 試用過,請試試!
 
SELECT DEPTNO,COLOR,CAST('' AS CHARACTER) AS SPEC,SUM(COUNTS) AS TOTCOUNT
FROM D100
WHERE
  PARTNO = :IPARTNO
AND
  (SPEC IS NULL OR SPEC = '')
GROUP BY DEPTNO,COLOR
UNION
SELECT DEPTNO,COLOR,CAST(SPEC AS CHARACTER) AS SPEC,SUM(COUNTS) AS TOTCOUNT
FROM D100
WHERE
  PARTNO = :IPARTNO
AND
  (SPEC IS NOT NULL AND SPEC <> '')
GROUP BY DEPTNO,COLOR,SPEC
shunaarom
一般會員


發表:8
回覆:34
積分:18
註冊:2003-07-02

發送簡訊給我
#12 引用回覆 回覆 發表時間:2005-07-04 17:19:55 IP:220.134.xxx.xxx 未訂閱
ttSQL:=SELECT CMMBT.SaNo, CUBT.CuBd FROM CMMBT INNER JOIN CUBT ON (CMMBT.SaNo IS NULL) AND (CUBT.CuBd IS NULL) 這是我查詢空值的SQL語法~不知是不是大大要的?? 因為我是用ADODataSet 所以只.recordcount就可以查出有幾筆~ 大大如需要做什麼判斷~在加程式碼就好了!!
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#13 引用回覆 回覆 發表時間:2005-07-04 22:45:18 IP:61.71.xxx.xxx 未訂閱
引言: 1. 抱歉,我原以為只是提供探討可行的方法。 2. 我直覺認為應該可行,所以我寫了一段語法並且在 INTERBASE 試用過,請試試!
 
SELECT DEPTNO,COLOR,CAST('' AS CHARACTER) AS SPEC,SUM(COUNTS) AS TOTCOUNT
FROM D100
WHERE
  PARTNO = :IPARTNO
AND
  (SPEC IS NULL OR SPEC = '')
GROUP BY DEPTNO,COLOR
UNION
SELECT DEPTNO,COLOR,CAST(SPEC AS CHARACTER) AS SPEC,SUM(COUNTS) AS TOTCOUNT
FROM D100
WHERE
  PARTNO = :IPARTNO
AND
  (SPEC IS NOT NULL AND SPEC <> '')
GROUP BY DEPTNO,COLOR,SPEC
這段語法我運行結果
A1  白  "" 1691
A1  白  "" 2596
A1  白 NULL 262
反而出現紅色那一筆, 好奇怪! 如果用我原來的寫法 SELECT DEPTNO,COLOR, SPEC, SUM(COUNTS) AS TOTCOUNT FROM D100 WHERE PARTNO='A1' AND COLOR='白色' AND (SPEC IS NULL OR SPEC = '') GROUP BY DEPTNO,COLOR, SPEC 結果如下, 而這個才是正確的
A1  白  "" 1691
A1  白 NULL 262
發表人 - P.D. 於 2005/07/04 22:48:02
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#14 引用回覆 回覆 發表時間:2005-07-04 22:55:29 IP:61.71.xxx.xxx 未訂閱
引言: ttSQL:=SELECT CMMBT.SaNo, CUBT.CuBd FROM CMMBT INNER JOIN CUBT ON (CMMBT.SaNo IS NULL) AND (CUBT.CuBd IS NULL) 這是我查詢空值的SQL語法~不知是不是大大要的?? 因為我是用ADODataSet 所以只.recordcount就可以查出有幾筆~ 大大如需要做什麼判斷~在加程式碼就好了!!
謝謝你的意見, 不過我的需求是在同一份TABLE上分析, 而且是要計算COUNTS值的總和, 這個語法可能不適用, 謝謝!
懷舊的人
高階會員


發表:28
回覆:152
積分:141
註冊:2003-01-08

發送簡訊給我
#15 引用回覆 回覆 發表時間:2005-07-05 11:58:55 IP:211.78.xxx.xxx 未訂閱
這真的是很奇怪 1. 我試將這語法用在 SQL SERVER 2000, INTERBASE 6.5, DBMAKER 4.0, PARADOX 都不會有問題而且都可得到正確的結果, 只有PARADOX 不支援 CAST('' AS CHARACTER) AS SPEC , 所以改成 '' AS SPEC, 改後結果依然正確 2. 我本懷疑是否資料庫系統安裝在 WINDOWS OR LINUX 的問題, 但我試 DBMAKER 在 LINUX 上執行結果也正確,沒有你試的奇怪結果 3. 只能請你檢查資料庫的 CHARACTER SET 或其他設定,因為我無法使用你的環境所以無法做進一部的分析 4. 希望你可以找到這原因並告訴我們,我們很希望知道這現象是如何產生的 謝謝! 發表人 - 懷舊的人 於 2005/07/05 12:00:06 發表人 - 懷舊的人 於 2005/07/05 12:01:58
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#16 引用回覆 回覆 發表時間:2005-07-08 10:14:53 IP:61.71.xxx.xxx 未訂閱
引言: 這真的是很奇怪 1. 我試將這語法用在 SQL SERVER 2000, INTERBASE 6.5, DBMAKER 4.0, PARADOX 都不會有問題而且都可得到正確的結果, 只有PARADOX 不支援 CAST('' AS CHARACTER) AS SPEC , 所以改成 '' AS SPEC, 改後結果依然正確 2. 我本懷疑是否資料庫系統安裝在 WINDOWS OR LINUX 的問題, 但我試 DBMAKER 在 LINUX 上執行結果也正確,沒有你試的奇怪結果 3. 只能請你檢查資料庫的 CHARACTER SET 或其他設定,因為我無法使用你的環境所以無法做進一部的分析 4. 希望你可以找到這原因並告訴我們,我們很希望知道這現象是如何產生的 謝謝! 發表人 - 懷舊的人 於 2005/07/05 12:00:06 發表人 - 懷舊的人 於 2005/07/05 12:01:58
感謝各位花那麼多時間解答, 因為案件結案中, 暫時無法詳細的查驗資料, 等結案後再仔細來研究一下, 謝謝!
系統時間:2024-06-27 22:35:35
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!