Page 1 of 1

select count distinct

Posted: Thu Dec 26, 2019 3:01 pm
by Totem
:D เรียนอาจารย์และเพื่อนสมาชิกทุกท่าน
ช่วยแก้การ select ข้อมูล 2 กรณี อธิบายได้ดังนี้

กรณีที่ 1
ใน Queries
1select count category Query
select ข้อมูลใน Tables select count
โดยกำหนดว่า select ข้อมูลใน category
ให้ select Z519 จะต้องอยู่คู่กับรายการอื่นๆ ไม่รวม Z519 ที่อยู่รายการเดียว
และเมือมี Z519 จับคู่ได้แล้วในฟิลด์ category และในฟิลด์ NO มีเลขซ้ำให้ select รายการเดียว เช่น
select ได้รายการนี้ count ได้ 3
NO category
4 Z519,I103
7 I12,I102,Z519,I111
10 I14,Z519 หรือ 10 Z519 , I119 ก็ได้

กรณีที่ 2
ใน Queries
2select count distinct No and category Query
select ข้อมูลใน Tables select count
โดยกำหนดว่า select ข้อมูลใน category
ให้ select Z519 จะต้องอยู่คู่กับรายการอื่นๆ ไม่รวม Z519 ที่อยู่รายการเดียว
และเมือมี Z519 จับคู่ได้แล้วในฟิลด์ category ไม่สนว่า NO จะซ้ำ เช่น
select ได้รายการนี้ count ได้ 4
NO category
4 Z519,I103
7 I12,I102,Z519,I111
10 I14,Z519
10 Z519 , I119

ขอบคุณครับ
select count.rar

Re: select count distinct

Posted: Thu Dec 26, 2019 9:16 pm
by snasui
:D ตัวอย่าง Query ครับ

กรณีที่ 1

Code: Select all

SELECT A.*
FROM (Select * From [select count] Where [select count].[category] Like '*Z519*' and [select count].[category] <> 'Z519') As A
     LEFT JOIN (Select * From [select count] Where [select count].[category] Like '*Z519*' and [select count].[category] <> 'Z519') As B
     ON A.[NO] = B.[NO]   AND   A.[category] < B.[category]
WHERE B.[category] IS NULL
Order By A.[NO] ASC
กรณีที่ 2

Code: Select all

SELECT A.*
FROM (Select * From [select count] Where [select count].[category] Like '*Z519*' and [select count].[category] <> 'Z519') As A
     LEFT JOIN (Select * From [select count] Where [select count].[category] Like '*Z519*' and [select count].[category] <> 'Z519') As B
     ON A.[NO] = B.[NO]   AND   A.[category] < B.[category]
Order By A.[NO] ASC

Re: select count distinct

Posted: Sat Dec 28, 2019 9:53 am
by Totem
snasui wrote: Thu Dec 26, 2019 9:16 pm :D ตัวอย่าง Query ครับ

กรณีที่ 1

Code: Select all

SELECT A.*
FROM (Select * From [select count] Where [select count].[category] Like '*Z519*' and [select count].[category] <> 'Z519') As A
     LEFT JOIN (Select * From [select count] Where [select count].[category] Like '*Z519*' and [select count].[category] <> 'Z519') As B
     ON A.[NO] = B.[NO]   AND   A.[category] < B.[category]
WHERE B.[category] IS NULL
Order By A.[NO] ASC
กรณีที่ 2

Code: Select all

SELECT A.*
FROM (Select * From [select count] Where [select count].[category] Like '*Z519*' and [select count].[category] <> 'Z519') As A
     LEFT JOIN (Select * From [select count] Where [select count].[category] Like '*Z519*' and [select count].[category] <> 'Z519') As B
     ON A.[NO] = B.[NO]   AND   A.[category] < B.[category]
Order By A.[NO] ASC
ได้ตามที่ต้องการครับ ขอบคุณครับอาจารย์

Re: select count distinct

Posted: Thu Jan 02, 2020 11:28 am
by Totem
:D เรียนอาจารย์และเพื่อนสมาชิก
มีปัญหาเพิ่มเติมต่อจากกรณีที่ 1 และ กรณีที่ 2 ดังนี้
กรณีที 3 1select count category Query
select ข้อมูลใน Tables select count
โดยกำหนดว่า select ข้อมูลใน category
ให้ select ไม่รวม Z519 เช่น
NO. category
2 I10
3 I100
4 I101
4 I150
5 I104
1 I102
3 I106
3 I11
3 I109
3 I107
3 I108
6 I105
8 I13
1 I15
9 I110
10 I134
8 I129
5 I140

กรณีที 4 1select count category Query
select ข้อมูลใน Tables select count
โดยกำหนดว่า select ข้อมูลใน category
ให้ select ไม่รวม Z519
และในฟิลด์ NO มีเลขซ้ำให้ select รายการเดียวและที่มี NO เลขไม่ซ้ำก็นำมาแสดง (ได้ NO.ที่ไม่ซ้ำกัน) เช่น
NO. category
2 I10
3 I100
4 I101
5 I104
1 I102
6 I105
8 I13
9 I110
10 I134

กรณีที่ 5 ข้อมูลใน Tables collection ให้
5.1 select ข้อมูลใน Tables collection
ดูในฟิลด์ NO
5.2 select ข้อมูลใน Tables select count
ดูในฟิลด์ NO และ หลักการตามกรณีที่ 2
โดยกำหนดว่า select ข้อมูลใน category
ให้ select Z519 จะต้องอยู่คู่กับรายการอื่นๆ ไม่รวม Z519 ที่อยู่รายการเดียว
และเมือมี Z519 จับคู่ได้แล้วในฟิลด์ category ไม่สนว่า NO จะซ้ำ
ทั้ง 5.1 และ 5.2 ในฟิลด์ NO จับคู่กัน
โดย ทั้ง 2 Tables (select count , collection) และ ทั้ง 2 field (NO)
มีเลขซ้ำให้ select รายการเดียวและที่มี NO เลขไม่ซ้ำก็นำมาแสดง (ได้ NO.ที่ไม่ซ้ำกัน) เช่น
แต่ยึดหลักว่า ข้อมูลใน Tables collection ต้องมีข้อมูล NO เสมอ
จึงจะนำไปจับคู่กับ ข้อมูลใน Tables collection , field NO เช่น
NO. collection category
4 1000 Z519,I103
7 300 I12,I102,Z519,I111
10 100 I14,Z519 หรือ 10 Z519 , I119 ก็ได้

ใช้ไฟล์แนบเดิมครับ ขอบคุณครับ

Re: select count distinct

Posted: Thu Jan 02, 2020 8:26 pm
by snasui
:D ลองเขียนมาดูเองก่อนตามแนวทางที่ผมให้ไป ติดปัญหาตรงไหนค่อยถามกันต่อครับ

Re: select count distinct

Posted: Fri Jan 03, 2020 12:10 pm
by Totem
snasui wrote: Thu Jan 02, 2020 8:26 pm :D ลองเขียนมาดูเองก่อนตามแนวทางที่ผมให้ไป ติดปัญหาตรงไหนค่อยถามกันต่อครับ
:D กรณีที่ 3 ทำได้แล้วครับ
กรณีที่ 4 เขียนได้ ดังนี้

Code: Select all

SELECT [NO], [category]
FROM (SELECT DISTINCT [NO], [category] FROM [select count] WHERE [select count].[category] NOT Like '*Z519*' and [select count].[category] <> 'Z519') 
AS [%$##@_Alias] ORDER BY [NO] ASC

SELECT ได้
NO category
1 I15
1 I102
2 I10
3 I11
3 I100
3 I106
3 I107
3 I108
3 I109
4 I150
4 I101
5 I104
5 I140
6 I105
8 I129
8 I13
9 I110
10 I134

ซึ่งถ้าตัด [category] ออก

Code: Select all

SELECT [NO], [category]
FROM (SELECT DISTINCT [NO] FROM [select count] WHERE [select count].[category] NOT Like '*Z519*' and [select count].[category] <> 'Z519') 
AS [%$##@_Alias] ORDER BY [NO] ASC
SELECT ได้
NO
1
2
3
4
5
6
8
9
10
ก็จะนับไปในฟิลด์ [NO] ได้ จำนวนไม่ซ้ำ แต่ [category] ไม่แสดงรายการ
กรณีนี้ต้องการแสดงรายการจำนวนไม่ซ้ำและแสดงรายการ [category] ด้วย ไม่สนว่าใน [category] จะมี รายการรหัส I อะไรก็ตามครับ
อาจารย์ช่วยปรับให้เป็นแนวทางหน่อยครับ

อีกอย่างกรณีต้องการเฉพาะผลลัพธ์ว่านับแล้วได้เท่าไร ใช้ Query ? เขียนยังไม่ได้ครับ

Code: Select all

SELECT Count(select count.[NO]) As Total
FROM (SELECT DISTINCT [NO], [category] FROM [select count] WHERE [select count].[category] NOT Like '*Z519*' and [select count].[category] <> 'Z519') 
AS [%$##@_Alias] ORDER BY [NO] ASC
และกรณีที่1 กรณีต้องการเฉพาะผลลัพธ์ว่านับแล้วได้เท่าไร ใช้ Query ?

Code: Select all

SELECT Count([select count].[NO]) As Total
FROM (SELECT * FROM [select count] WHERE [select count].[category] Like '*Z519*' and [select count].[category] <> 'Z519')  AS A LEFT JOIN (SELECT * FROM [select count] WHERE [select count].[category] Like '*Z519*' and [select count].[category] <> 'Z519')  AS B ON (A.[NO] = B.[NO]) AND (A.[category] < B.[category])
WHERE B.category Is Null
ORDER BY A.[NO];
ขอบคุณครับ

Re: select count distinct

Posted: Fri Jan 03, 2020 8:29 pm
by snasui
:D ผมดูแล้วที่ลองเขียนมาไม่ได้ใช้แนวทางที่ผมเขียนเป็นต้วอย่างให้ไปแต่อย่างใดครับ :lol:
Totem wrote: Thu Jan 02, 2020 11:28 am กรณีที 4 1select count category Query
select ข้อมูลใน Tables select count
โดยกำหนดว่า select ข้อมูลใน category
ให้ select ไม่รวม Z519
และในฟิลด์ NO มีเลขซ้ำให้ select รายการเดียวและที่มี NO เลขไม่ซ้ำก็นำมาแสดง (ได้ NO.ที่ไม่ซ้ำกัน) เช่น
NO. category
2 I10
3 I100
4 I101
5 I104
1 I102
6 I105
8 I13
9 I110
10 I134
ตัวอย่าง Code ครับ

Code: Select all

SELECT A.*
FROM (Select * From [select count] Where [select count].[category] Not Like '*Z519*' ) As A
     LEFT JOIN (Select * From [select count] Where [select count].[category] Not Like '*Z519*') As B
     ON A.[NO] = B.[NO]   AND   A.[category] < B.[category]
WHERE B.[category] IS NULL
Order By A.[NO] ASC
กรณีต้องการนับ

Code: Select all

SELECT Count(A.[category]) As Count
FROM (Select * From [select count] Where [select count].[category] Not Like '*Z519*' ) As A
     LEFT JOIN (Select * From [select count] Where [select count].[category] Not Like '*Z519*') As B
     ON A.[NO] = B.[NO]   AND   A.[category] < B.[category]
WHERE B.[category] IS NULL
ข้อ 5 ให้สร้าง Query ทำการ Join Table นำคอลัมน์ที่เกี่ยวข้องมาแสดงเสียก่อนแล้วค่อยประยุกต์ Query เหล่านี้ไปใช้อีกทีครับ

Re: select count distinct

Posted: Sat Jan 04, 2020 12:03 pm
by Totem
snasui wrote: Fri Jan 03, 2020 8:29 pm :D ผมดูแล้วที่ลองเขียนมาไม่ได้ใช้แนวทางที่ผมเขียนเป็นต้วอย่างให้ไปแต่อย่างใดครับ :lol:
Totem wrote: Thu Jan 02, 2020 11:28 am กรณีที 4 1select count category Query
select ข้อมูลใน Tables select count
โดยกำหนดว่า select ข้อมูลใน category
ให้ select ไม่รวม Z519
และในฟิลด์ NO มีเลขซ้ำให้ select รายการเดียวและที่มี NO เลขไม่ซ้ำก็นำมาแสดง (ได้ NO.ที่ไม่ซ้ำกัน) เช่น
NO. category
2 I10
3 I100
4 I101
5 I104
1 I102
6 I105
8 I13
9 I110
10 I134
ตัวอย่าง Code ครับ

Code: Select all

SELECT A.*
FROM (Select * From [select count] Where [select count].[category] Not Like '*Z519*' ) As A
     LEFT JOIN (Select * From [select count] Where [select count].[category] Not Like '*Z519*') As B
     ON A.[NO] = B.[NO]   AND   A.[category] < B.[category]
WHERE B.[category] IS NULL
Order By A.[NO] ASC
กรณีต้องการนับ

Code: Select all

SELECT Count(A.[category]) As Count
FROM (Select * From [select count] Where [select count].[category] Not Like '*Z519*' ) As A
     LEFT JOIN (Select * From [select count] Where [select count].[category] Not Like '*Z519*') As B
     ON A.[NO] = B.[NO]   AND   A.[category] < B.[category]
WHERE B.[category] IS NULL
ข้อ 5 ให้สร้าง Query ทำการ Join Table นำคอลัมน์ที่เกี่ยวข้องมาแสดงเสียก่อนแล้วค่อยประยุกต์ Query เหล่านี้ไปใช้อีกทีครับ
:D
:tt: :lol: ผมยังมีความรู้ยังน้อยครับ(ไปไม่เป็นเลย)ในเรื่อง Query กำลังศึกษาหาความรู้เพิ่มเติมมาปรับใช้ ตัวอย่างที่อาจารย์เป็นแนวทางจะลองไปศึกษาปรับใช้ ใช้ได้อย่างไรจะมาแจ้งอีกครั้งครับ ขอบคุณอาจารย์มากที่กรุณาเขียนตัวอย่างและแนะนำให้ครับ :lol:

Re: select count distinct

Posted: Tue Jan 07, 2020 11:25 am
by Totem
snasui wrote: Fri Jan 03, 2020 8:29 pm :D ผมดูแล้วที่ลองเขียนมาไม่ได้ใช้แนวทางที่ผมเขียนเป็นต้วอย่างให้ไปแต่อย่างใดครับ :lol:
Totem wrote: Thu Jan 02, 2020 11:28 am กรณีที 4 1select count category Query
select ข้อมูลใน Tables select count
โดยกำหนดว่า select ข้อมูลใน category
ให้ select ไม่รวม Z519
และในฟิลด์ NO มีเลขซ้ำให้ select รายการเดียวและที่มี NO เลขไม่ซ้ำก็นำมาแสดง (ได้ NO.ที่ไม่ซ้ำกัน) เช่น
NO. category
2 I10
3 I100
4 I101
5 I104
1 I102
6 I105
8 I13
9 I110
10 I134
ตัวอย่าง Code ครับ

Code: Select all

SELECT A.*
FROM (Select * From [select count] Where [select count].[category] Not Like '*Z519*' ) As A
     LEFT JOIN (Select * From [select count] Where [select count].[category] Not Like '*Z519*') As B
     ON A.[NO] = B.[NO]   AND   A.[category] < B.[category]
WHERE B.[category] IS NULL
Order By A.[NO] ASC
กรณีต้องการนับ

Code: Select all

SELECT Count(A.[category]) As Count
FROM (Select * From [select count] Where [select count].[category] Not Like '*Z519*' ) As A
     LEFT JOIN (Select * From [select count] Where [select count].[category] Not Like '*Z519*') As B
     ON A.[NO] = B.[NO]   AND   A.[category] < B.[category]
WHERE B.[category] IS NULL
:D ได้ตามต้องการครับ ขอบคุณครับ

Re: select count distinct

Posted: Tue Jan 07, 2020 11:52 am
by Totem
:D เรียนอาจารย์ ผมนำไปปรับใช้ ดังนี้
จาก กรณีที่ 2

Code: Select all

SELECT Count(A.[NO]) AS [Count]

Code: Select all

SELECT Count(A.[NO]) AS [Count]
FROM (Select * From [select count] Where [select count].[category] Like '*Z519*' and [select count].[category] <> 'Z519') As A
     LEFT JOIN (Select * From [select count] Where [select count].[category] Like '*Z519*' and [select count].[category] <> 'Z519') As B
     ON A.[NO] = B.[NO]   AND   A.[category] < B.[category]
แสดงรายการได้ 4 รายการ

Code: Select all

SELECT DISTINCT A.[NO] AS [Count]

Code: Select all

SELECT DISTINCT A.[NO] AS [Count]
FROM (Select * From [select count] Where [select count].[category] Like '*Z519*' and [select count].[category] <> 'Z519') As A
     LEFT JOIN (Select * From [select count] Where [select count].[category] Like '*Z519*' and [select count].[category] <> 'Z519') As B
     ON A.[NO] = B.[NO]   AND   A.[category] < B.[category]
แสดงรายการได้ 3 รายการ
แต่ที่ต้องการปรับตามโครงสร้าง
SELECT COUNT(DISTINCT column_name) FROM table_name

Code: Select all

SELECT Count(DISTINCT A.[NO]) AS [Count]
FROM (SELECT * FROM [select count] WHERE [select count].[category] Like '*Z519*' and [select count].[category] <> 'Z519')  AS A LEFT JOIN (SELECT * FROM [select count] WHERE [select count].[category] Like '*Z519*' and [select count].[category] <> 'Z519')  AS B ON (A.[NO] = B.[NO]) AND (A.[category] < B.[category])
นับจำนวนผลลัพธ์รวมได้ 3
แต่ Syntax error ปรับให้ได้ผลลัพธ์ได้ 3 แก้ได้อย่างไรครับ
หรือว่าโครงสร้าง SELECT COUNT(DISTINCT column_name) FROM table_name ใช้กับ ACCESS ไม่ได้หรือเปล่าครับ ใช้ได้แต่ SQL อื่น
ขอบคุณครับ

Re: select count distinct

Posted: Tue Jan 07, 2020 8:22 pm
by snasui
:D ตัวอย่างการปรับ Query ครับ

Code: Select all

Select Count(R.[NO]) As Count From
(SELECT Distinct(A.[NO])
FROM (SELECT * FROM [select count] WHERE [select count].[category] Like '*Z519*' and [select count].[category] <> 'Z519')  AS A LEFT JOIN (SELECT * FROM [select count] WHERE [select count].[category] Like '*Z519*' and [select count].[category] <> 'Z519')  AS B ON (A.[NO] = B.[NO]) AND (A.[category] < B.[category])) As R

Re: select count distinct

Posted: Wed Jan 08, 2020 1:28 pm
by Totem
snasui wrote: Tue Jan 07, 2020 8:22 pm :D ตัวอย่างการปรับ Query ครับ

Code: Select all

Select Count(R.[NO]) As Count From
(SELECT Distinct(A.[NO])
FROM (SELECT * FROM [select count] WHERE [select count].[category] Like '*Z519*' and [select count].[category] <> 'Z519')  AS A LEFT JOIN (SELECT * FROM [select count] WHERE [select count].[category] Like '*Z519*' and [select count].[category] <> 'Z519')  AS B ON (A.[NO] = B.[NO]) AND (A.[category] < B.[category])) As R

:D ได้ตามต้องการแล้วครับ ขอบคุณครับ