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

如何在已經COUNT數量上再下一次COUNT

答題得分者是:ttring
lovemari
中階會員


發表:134
回覆:224
積分:76
註冊:2005-08-18

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-01-15 17:17:39 IP:122.116.xxx.xxx 訂閱
小弟最近需要做一份資料
內容是

SN 品號 統計換版
1 XX 1
2 XX 3
3 XX 3
4 XX 1
5 XX 1

-那希望秀成-

品號 統計換版 數量
XX 1 3
XX 3 2

就是原有的 COUNT 統計換版上 再做一次統計
所以 3 會有 2筆 1 會有3筆

可小弟程式碼跑出來變成

品號 統計換版 數量
XX 1 1
XX 3 3

數量都跟前面的統計一樣數字

[code delphi]
SELECT B.PART_NO "品號",A.SERIAL_NUMBER,COUNT(C.PART_NAME) "統計換版",COUNT(G.CNT) "數量"
FROM G_SN_REPAIR A,
SYS_PART B,
G_SN_REPAIR_LOCATION C,
(SELECT E.PART_NO,COUNT(F.PART_NAME) CNT,D.SERIAL_NUMBER
FROM G_SN_REPAIR D,
SYS_PART E,
G_SN_REPAIR_LOCATION F
WHERE TO_CHAR(REPAIR_TIME,'YYYYMMDD') BETWEEN '20080701' AND '20081231'
AND D.MODEL_ID = E.PART_ID
AND D.RECID = F.RECID
AND D.RP_STAGE_ID = '10015'
AND E.PART_NO = 'PA962'
AND F.PART_NAME <> 'N/A'
GROUP BY D.SERIAL_NUMBER,E.PART_NO
ORDER BY COUNT(F.PART_NAME) DESC) G


WHERE TO_CHAR(REPAIR_TIME,'YYYYMMDD') BETWEEN '20080701' AND '20081231'
AND A.MODEL_ID = B.PART_ID
AND A.RECID = C.RECID
AND A.SERIAL_NUMBER = G.SERIAL_NUMBER
AND A.RP_STAGE_ID = '10015'
AND B.PART_NO = 'PA962'
AND C.PART_NAME <> 'N/A'
GROUP BY B.PART_NO,A.SERIAL_NUMBER
ORDER BY COUNT(C.PART_NAME) DESC

[/code]
------
Program : Delphi 7
DataBase : Oracle 9i
Client : ClientDataSet
ttring
一般會員


發表:11
回覆:23
積分:16
註冊:2008-11-19

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-01-15 17:51:54 IP:60.248.xxx.xxx 訂閱
假如table 是長這樣
SN 品號 統計換版
1 XX 1
2 XX 3
3 XX 3
4 XX 1
5 XX 1

select 品號, 統計換版, count(*) as 數量
from table
group by 品號, 統計換版

即可

或者提供原始table 大略的情況 :P

===================引 用 lovemari 文 章===================
小弟最近需要做一份資料
內容是

SN 品號 統計換版
1 XX 1
2 XX 3
3 XX 3
4 XX 1
5 XX 1

-那希望秀成-

品號 統計換版 數量
XX 1 3
XX 3 2

就是原有的 COUNT 統計換版上 再做一次統計
所以 3 會有 2筆 1 會有3筆

可小弟程式碼跑出來變成

品號 統計換版 數量
XX 1 1
XX 3 3

數量都跟前面的統計一樣數字

[code delphi]
SELECT B.PART_NO "品號",A.SERIAL_NUMBER,COUNT(C.PART_NAME) "統計換版",COUNT(G.CNT) "數量"
FROM G_SN_REPAIR A,
SYS_PART B,
G_SN_REPAIR_LOCATION C,
(SELECT E.PART_NO,COUNT(F.PART_NAME) CNT,D.SERIAL_NUMBER
FROM G_SN_REPAIR D,
SYS_PART E,
G_SN_REPAIR_LOCATION F
WHERE TO_CHAR(REPAIR_TIME,'YYYYMMDD') BETWEEN '20080701' AND '20081231'
AND D.MODEL_ID = E.PART_ID
AND D.RECID = F.RECID
AND D.RP_STAGE_ID = '10015'
AND E.PART_NO = 'PA962'
AND F.PART_NAME <> 'N/A'
GROUP BY D.SERIAL_NUMBER,E.PART_NO
ORDER BY COUNT(F.PART_NAME) DESC) G


WHERE TO_CHAR(REPAIR_TIME,'YYYYMMDD') BETWEEN '20080701' AND '20081231'
AND A.MODEL_ID = B.PART_ID
AND A.RECID = C.RECID
AND A.SERIAL_NUMBER = G.SERIAL_NUMBER
AND A.RP_STAGE_ID = '10015'
AND B.PART_NO = 'PA962'
AND C.PART_NAME <> 'N/A'
GROUP BY B.PART_NO,A.SERIAL_NUMBER
ORDER BY COUNT(C.PART_NAME) DESC

[/code]
編輯記錄
ttring 重新編輯於 2009-01-15 17:52:52, 註解 無‧
lovemari
中階會員


發表:134
回覆:224
積分:76
註冊:2005-08-18

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-01-19 09:50:02 IP:122.116.xxx.xxx 訂閱
Dear 樓上大大

Table 是長這樣下面這樣

SN 品號 PART_NAME
1 XX YY
2 XX YY
3 XX ZZ
4 XX ZZ
5 XX YY

統計換版 是我已經先Count 一次了

Select SN,品號 , COUNT(PART_NAME) "統計換版"
FROM TABLE
GROUP BY SN,品號

然後我需要在已經COUNT過的 統計換版 再做一次COUNT 去算

這邊就卡住了...
------
Program : Delphi 7
DataBase : Oracle 9i
Client : ClientDataSet
ttring
一般會員


發表:11
回覆:23
積分:16
註冊:2008-11-19

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-01-20 09:24:59 IP:60.248.xxx.xxx 訂閱
table  長這樣, 用你的語法, 跑出來不是會變成 如下 (因SN 每筆都不同啊 @@)

SN 品號 "統計換版"
1 XX 1
2 XX 1
3 XX 1
4 XX 1
5 XX 1

如果是 select 品號, count(part_name) as '統計換版)
from table
group by 品號, part_name

變成
品號 統計換版
XX 3
XX 2

===================引 用 lovemari 文 章===================
Dear 樓上大大

Table 是長這樣下面這樣

SN 品號 PART_NAME
1 XX YY
2 XX YY
3 XX ZZ
4 XX ZZ
5 XX YY

統計換版 是我已經先Count 一次了

Select SN,品號 , COUNT(PART_NAME) "統計換版"
FROM TABLE
GROUP BY SN,品號

然後我需要在已經COUNT過的 統計換版 再做一次COUNT 去算

這邊就卡住了...
lovemari
中階會員


發表:134
回覆:224
積分:76
註冊:2005-08-18

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-01-20 11:28:25 IP:122.116.xxx.xxx 訂閱
Dear  大大

對不起 是我口誤....

我沒解釋清楚Table

Table 是長下面這樣

SN 品號 PART_NAME
1 XX ABC
1 XX DEF
1 XX GHI
2 XX PLA
2 XX SFS
3 YY YWR
4 XX QWE
4 XX JKJ

所以當我下
SELECT SN,品號,COUNT(PART_NAME)
FROM TABLE
GROUP BY SN,品號

結果會出現
SN 品號 COUNT
1 XX 3
2 XX 2
3 YY 1
4 XX 2

=======然後以下是我目前遇到的問題 以及想呈現的畫面======

那我想在篩選就是 品號 的 COUNT = 3 的有幾PCS COUNT = 2 的有幾PCS

希望呈現出
品號 COUNT PCS
XX 3 1
XX 2 2
YY 1 1

------
Program : Delphi 7
DataBase : Oracle 9i
Client : ClientDataSet
ttring
一般會員


發表:11
回覆:23
積分:16
註冊:2008-11-19

發送簡訊給我
#6 引用回覆 回覆 發表時間:2009-01-20 11:52:30 IP:60.248.xxx.xxx 訂閱
這樣呢?.?
select 品號, cou , count(*) as pcs
from (
SELECT SN,品號,COUNT(PART_NAME) as cou
FROM TABLE
GROUP BY SN,品號 )
group by 品號, cou



===================引 用 lovemari 文 章===================
Dear 大大

對不起 是我口誤....

我沒解釋清楚Table

Table 是長下面這樣

SN 品號 PART_NAME
1 XX ABC
1 XX DEF
1 XX GHI
2 XX PLA
2 XX SFS
3 YY YWR
4 XX QWE
4 XX JKJ

所以當我下
SELECT SN,品號,COUNT(PART_NAME)
FROM TABLE
GROUP BY SN,品號

結果會出現
SN 品號 COUNT
1 XX 3
2 XX 2
3 YY 1
4 XX 2

=======然後以下是我目前遇到的問題 以及想呈現的畫面======

那我想在篩選就是 品號 的 COUNT = 3 的有幾PCS COUNT = 2 的有幾PCS

希望呈現出
品號 COUNT PCS
XX 3 1
XX 2 2
YY 1 1

lovemari
中階會員


發表:134
回覆:224
積分:76
註冊:2005-08-18

發送簡訊給我
#7 引用回覆 回覆 發表時間:2009-01-20 14:16:36 IP:122.116.xxx.xxx 訂閱
Dear 

這各方法我原本有試過
那發現COUNT出來數字很大

可是剛剛發現到
PCS 數字 竟然是 COUNT 的倍數

如果COUNT = 1 PCS = COUNT * 1
如果COUNT = 2 PCS = COUNT * 2

所以我再改成
(COUNT(*) / COU) AS PCS
就可以了

感謝...
------
Program : Delphi 7
DataBase : Oracle 9i
Client : ClientDataSet
ttring
一般會員


發表:11
回覆:23
積分:16
註冊:2008-11-19

發送簡訊給我
#8 引用回覆 回覆 發表時間:2009-01-20 14:33:26 IP:60.248.xxx.xxx 訂閱
我依你的資料建的table  語法應該是沒問題的
但看你原本貼的SQL 碼, 實際的table 應是複雜多的

所以若有空也許可以查查看是否在那個子查詢 或 join 時
少了那個key 值對應, 造成有倍數資料的出現


===================引 用 lovemari 文 章===================
Dear

這各方法我原本有試過
那發現COUNT出來數字很大

可是剛剛發現到
PCS 數字 竟然是 COUNT 的倍數

如果COUNT = 1 PCS = COUNT * 1
如果COUNT = 2 PCS = COUNT * 2

所以我再改成
(COUNT(*) / COU) AS PCS
就可以了

感謝...
lovemari
中階會員


發表:134
回覆:224
積分:76
註冊:2005-08-18

發送簡訊給我
#9 引用回覆 回覆 發表時間:2009-01-21 09:00:32 IP:122.116.xxx.xxx 訂閱
嗯嗯..

我知道了,...

謝謝你
------
Program : Delphi 7
DataBase : Oracle 9i
Client : ClientDataSet
系統時間:2024-05-05 3:16:32
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!