รบกวนถามเซียน SQL หน่อยค่า

เริ่มโดย NooNaamz, 01 พฤษภาคม 2014, 18:10:59

หัวข้อก่อนหน้า - หัวข้อถัดไป

0 สมาชิก และ 1 ผู้มาเยือน กำลังดูหัวข้อนี้

NooNaamz

หนูมีตารางแบบนี้
tableName
+------+------------------------+
|  ID  |          Name          |
+------+------------------------+
|  01  | Mr.A01                 |
|  02  | Mr.A02                 |
|  03  | Mr.A03                 |
|  04  | Mr.A04                 |
|  05  | Mr.A05                 |
|  06  | Mr.A06                 |
|  07  | Mr.A07                 |
|  08  | Mr.A08                 |
+------+------------------------+
tableSalay
+-------+------+------------+-----------+
|  mID  |  ID  |   Salary   |    Tax    | 
+-------+------+------------+-----------+
|   1   |  01  |  20,000.00 |  1,000.00 |
|   1   |  02  |  20,000.00 |  1,000.00 |
|   1   |  03  |  20,000.00 |  1,000.00 |
|   1   |  04  |  20,000.00 |  1,000.00 |
|   1   |  05  |  20,000.00 |  1,000.00 |
|   2   |  01  |  20,000.00 |  1,000.00 |
|   2   |  02  |  20,000.00 |  1,000.00 |
|   2   |  03  |  20,000.00 |  1,000.00 |
|   2   |  04  |  20,000.00 |  1,000.00 |
|   2   |  05  |  20,000.00 |  1,000.00 |
|   2   |  06  |  20,000.00 |  1,000.00 |
|   2   |  07  |  20,000.00 |  1,000.00 |
|   2   |  08  |  20,000.00 |  1,000.00 |
+-------+------+------------+-----------+
tableMonth
+-------+-----------+
|  mID  |   Month   |
+-------+-----------+
|   1   |  01-2014  |
|   2   |  02-2014  |
+-------+-----------+

หนูต้องการ จะ select ให้ ออกมาเป็นหน้าตาแบบนี้
+------------------------+-----------+
|          Name          |    Tax    |
+------------------------+-----------+
| Mr.A01                 |  2,000.00 |
| Mr.A02                 |  2,000.00 |
| Mr.A03                 |  2,000.00 |
| Mr.A04                 |  2,000.00 |
| Mr.A05                 |  2,000.00 |
| Mr.A06                 |  1,000.00 |
| Mr.A07                 |  1,000.00 |
| Mr.A08                 |  1,000.00 |
+------------------------+-----------+

หนูจะต้องเขียน query อย่างไรค่ะ
ขอบพระคุณทุกๆท่านค่ะ

slasz

#1
อ้างถึงจาก: NooNaamz ใน 01 พฤษภาคม 2014, 18:10:59
หนูมีตารางแบบนี้
tableName
+------+------------------------+
|  ID  |          Name          |
+------+------------------------+
|  01  | Mr.A01                 |
|  02  | Mr.A02                 |
|  03  | Mr.A03                 |
|  04  | Mr.A04                 |
|  05  | Mr.A05                 |
|  06  | Mr.A06                 |
|  07  | Mr.A07                 |
|  08  | Mr.A08                 |
+------+------------------------+
tableSalay
+-------+------+------------+-----------+
|  mID  |  ID  |   Salary   |    Tax    | 
+-------+------+------------+-----------+
|   1   |  01  |  20,000.00 |  1,000.00 |
|   1   |  02  |  20,000.00 |  1,000.00 |
|   1   |  03  |  20,000.00 |  1,000.00 |
|   1   |  04  |  20,000.00 |  1,000.00 |
|   1   |  05  |  20,000.00 |  1,000.00 |
|   2   |  01  |  20,000.00 |  1,000.00 |
|   2   |  02  |  20,000.00 |  1,000.00 |
|   2   |  03  |  20,000.00 |  1,000.00 |
|   2   |  04  |  20,000.00 |  1,000.00 |
|   2   |  05  |  20,000.00 |  1,000.00 |
|   2   |  06  |  20,000.00 |  1,000.00 |
|   2   |  07  |  20,000.00 |  1,000.00 |
|   2   |  08  |  20,000.00 |  1,000.00 |
+-------+------+------------+-----------+
tableMonth
+-------+-----------+
|  mID  |   Month   |
+-------+-----------+
|   1   |  01-2014  |
|   2   |  02-2014  |
+-------+-----------+

หนูต้องการ จะ select ให้ ออกมาเป็นหน้าตาแบบนี้
+------------------------+-----------+
|          Name          |    Tax    |
+------------------------+-----------+
| Mr.A01                 |  2,000.00 |
| Mr.A02                 |  2,000.00 |
| Mr.A03                 |  2,000.00 |
| Mr.A04                 |  2,000.00 |
| Mr.A05                 |  2,000.00 |
| Mr.A06                 |  1,000.00 |
| Mr.A07                 |  1,000.00 |
| Mr.A08                 |  1,000.00 |
+------------------------+-----------+

หนูจะต้องเขียน query อย่างไรค่ะ
ขอบพระคุณทุกๆท่านค่ะ

SELECT tableName.Name, sum(tableSalary.Tax) FROM tableName INNER JOIN tableSalary ON tableName.ID = tableSalary.ID
GROUP BY  tableName.Name, tableSalary.Tax

กรณีเอา Tax มาบวกกัน
[direct=http://www.ilike-thailand.com]like thailand[/direct]
[direct=http://www.2bebeauty.com/]2bebeauty ชุดเดรสไปงานแต่งสวยๆ[/direct]
[direct=http://www.2bebeauty.com/]แฟชั่นเสื้อผ้าเกาหลี[/direct]
[direct=https://www.proudyourstyle.com/]Bunion Corrector Pain Relief[/direct]

ekateikate

[direct=https://www.jitjai.com]Jitjai.com[/direct]

NooNaamz

อ้างถึงจาก: slasz ใน 01 พฤษภาคม 2014, 18:21:34
อ้างถึงจาก: NooNaamz ใน 01 พฤษภาคม 2014, 18:10:59
หนูมีตารางแบบนี้
tableName
+------+------------------------+
|  ID  |          Name          |
+------+------------------------+
|  01  | Mr.A01                 |
|  02  | Mr.A02                 |
|  03  | Mr.A03                 |
|  04  | Mr.A04                 |
|  05  | Mr.A05                 |
|  06  | Mr.A06                 |
|  07  | Mr.A07                 |
|  08  | Mr.A08                 |
+------+------------------------+
tableSalay
+-------+------+------------+-----------+
|  mID  |  ID  |   Salary   |    Tax    | 
+-------+------+------------+-----------+
|   1   |  01  |  20,000.00 |  1,000.00 |
|   1   |  02  |  20,000.00 |  1,000.00 |
|   1   |  03  |  20,000.00 |  1,000.00 |
|   1   |  04  |  20,000.00 |  1,000.00 |
|   1   |  05  |  20,000.00 |  1,000.00 |
|   2   |  01  |  20,000.00 |  1,000.00 |
|   2   |  02  |  20,000.00 |  1,000.00 |
|   2   |  03  |  20,000.00 |  1,000.00 |
|   2   |  04  |  20,000.00 |  1,000.00 |
|   2   |  05  |  20,000.00 |  1,000.00 |
|   2   |  06  |  20,000.00 |  1,000.00 |
|   2   |  07  |  20,000.00 |  1,000.00 |
|   2   |  08  |  20,000.00 |  1,000.00 |
+-------+------+------------+-----------+
tableMonth
+-------+-----------+
|  mID  |   Month   |
+-------+-----------+
|   1   |  01-2014  |
|   2   |  02-2014  |
+-------+-----------+

หนูต้องการ จะ select ให้ ออกมาเป็นหน้าตาแบบนี้
+------------------------+-----------+
|          Name          |    Tax    |
+------------------------+-----------+
| Mr.A01                 |  2,000.00 |
| Mr.A02                 |  2,000.00 |
| Mr.A03                 |  2,000.00 |
| Mr.A04                 |  2,000.00 |
| Mr.A05                 |  2,000.00 |
| Mr.A06                 |  1,000.00 |
| Mr.A07                 |  1,000.00 |
| Mr.A08                 |  1,000.00 |
+------------------------+-----------+

หนูจะต้องเขียน query อย่างไรค่ะ
ขอบพระคุณทุกๆท่านค่ะ

SELECT tableName.Name, sum(tableSalary.Tax) FROM tableName INNER JOIN tableSalary ON tableName.ID = tableSalary.ID
GROUP BY  tableName.Name, tableSalary.Tax

กรณีเอา Tax มาบวกกัน

ไม่ได้คะ มันยังออกมา มี tableName.Name ซ้ำกัน  :wanwan012: :wanwan012:

umm205

อ้างถึงจาก: NooNaamz ใน 01 พฤษภาคม 2014, 19:45:08
อ้างถึงจาก: slasz ใน 01 พฤษภาคม 2014, 18:21:34
อ้างถึงจาก: NooNaamz ใน 01 พฤษภาคม 2014, 18:10:59
หนูมีตารางแบบนี้
tableName
+------+------------------------+
|  ID  |          Name          |
+------+------------------------+
|  01  | Mr.A01                 |
|  02  | Mr.A02                 |
|  03  | Mr.A03                 |
|  04  | Mr.A04                 |
|  05  | Mr.A05                 |
|  06  | Mr.A06                 |
|  07  | Mr.A07                 |
|  08  | Mr.A08                 |
+------+------------------------+
tableSalay
+-------+------+------------+-----------+
|  mID  |  ID  |   Salary   |    Tax    | 
+-------+------+------------+-----------+
|   1   |  01  |  20,000.00 |  1,000.00 |
|   1   |  02  |  20,000.00 |  1,000.00 |
|   1   |  03  |  20,000.00 |  1,000.00 |
|   1   |  04  |  20,000.00 |  1,000.00 |
|   1   |  05  |  20,000.00 |  1,000.00 |
|   2   |  01  |  20,000.00 |  1,000.00 |
|   2   |  02  |  20,000.00 |  1,000.00 |
|   2   |  03  |  20,000.00 |  1,000.00 |
|   2   |  04  |  20,000.00 |  1,000.00 |
|   2   |  05  |  20,000.00 |  1,000.00 |
|   2   |  06  |  20,000.00 |  1,000.00 |
|   2   |  07  |  20,000.00 |  1,000.00 |
|   2   |  08  |  20,000.00 |  1,000.00 |
+-------+------+------------+-----------+
tableMonth
+-------+-----------+
|  mID  |   Month   |
+-------+-----------+
|   1   |  01-2014  |
|   2   |  02-2014  |
+-------+-----------+

หนูต้องการ จะ select ให้ ออกมาเป็นหน้าตาแบบนี้
+------------------------+-----------+
|          Name          |    Tax    |
+------------------------+-----------+
| Mr.A01                 |  2,000.00 |
| Mr.A02                 |  2,000.00 |
| Mr.A03                 |  2,000.00 |
| Mr.A04                 |  2,000.00 |
| Mr.A05                 |  2,000.00 |
| Mr.A06                 |  1,000.00 |
| Mr.A07                 |  1,000.00 |
| Mr.A08                 |  1,000.00 |
+------------------------+-----------+

หนูจะต้องเขียน query อย่างไรค่ะ
ขอบพระคุณทุกๆท่านค่ะ

SELECT tableName.Name, sum(tableSalary.Tax) FROM tableName INNER JOIN tableSalary ON tableName.ID = tableSalary.ID
GROUP BY  tableName.Name, tableSalary.Tax

กรณีเอา Tax มาบวกกัน

ไม่ได้คะ มันยังออกมา มี tableName.Name ซ้ำกัน  :wanwan012: :wanwan012:


GROUP BY  tableName.Name

slasz

อ้างถึงจาก: NooNaamz ใน 01 พฤษภาคม 2014, 19:45:08
อ้างถึงจาก: slasz ใน 01 พฤษภาคม 2014, 18:21:34
อ้างถึงจาก: NooNaamz ใน 01 พฤษภาคม 2014, 18:10:59
หนูมีตารางแบบนี้
tableName
+------+------------------------+
|  ID  |          Name          |
+------+------------------------+
|  01  | Mr.A01                 |
|  02  | Mr.A02                 |
|  03  | Mr.A03                 |
|  04  | Mr.A04                 |
|  05  | Mr.A05                 |
|  06  | Mr.A06                 |
|  07  | Mr.A07                 |
|  08  | Mr.A08                 |
+------+------------------------+
tableSalay
+-------+------+------------+-----------+
|  mID  |  ID  |   Salary   |    Tax    | 
+-------+------+------------+-----------+
|   1   |  01  |  20,000.00 |  1,000.00 |
|   1   |  02  |  20,000.00 |  1,000.00 |
|   1   |  03  |  20,000.00 |  1,000.00 |
|   1   |  04  |  20,000.00 |  1,000.00 |
|   1   |  05  |  20,000.00 |  1,000.00 |
|   2   |  01  |  20,000.00 |  1,000.00 |
|   2   |  02  |  20,000.00 |  1,000.00 |
|   2   |  03  |  20,000.00 |  1,000.00 |
|   2   |  04  |  20,000.00 |  1,000.00 |
|   2   |  05  |  20,000.00 |  1,000.00 |
|   2   |  06  |  20,000.00 |  1,000.00 |
|   2   |  07  |  20,000.00 |  1,000.00 |
|   2   |  08  |  20,000.00 |  1,000.00 |
+-------+------+------------+-----------+
tableMonth
+-------+-----------+
|  mID  |   Month   |
+-------+-----------+
|   1   |  01-2014  |
|   2   |  02-2014  |
+-------+-----------+

หนูต้องการ จะ select ให้ ออกมาเป็นหน้าตาแบบนี้
+------------------------+-----------+
|          Name          |    Tax    |
+------------------------+-----------+
| Mr.A01                 |  2,000.00 |
| Mr.A02                 |  2,000.00 |
| Mr.A03                 |  2,000.00 |
| Mr.A04                 |  2,000.00 |
| Mr.A05                 |  2,000.00 |
| Mr.A06                 |  1,000.00 |
| Mr.A07                 |  1,000.00 |
| Mr.A08                 |  1,000.00 |
+------------------------+-----------+

หนูจะต้องเขียน query อย่างไรค่ะ
ขอบพระคุณทุกๆท่านค่ะ

SELECT tableName.Name, sum(tableSalary.Tax) FROM tableName INNER JOIN tableSalary ON tableName.ID = tableSalary.ID
GROUP BY  tableName.Name, tableSalary.Tax

กรณีเอา Tax มาบวกกัน

ไม่ได้คะ มันยังออกมา มี tableName.Name ซ้ำกัน  :wanwan012: :wanwan012:

ลองตัวใหม่ที่มีการ GROUP BY เข้าไปยังครับ
[direct=http://www.ilike-thailand.com]like thailand[/direct]
[direct=http://www.2bebeauty.com/]2bebeauty ชุดเดรสไปงานแต่งสวยๆ[/direct]
[direct=http://www.2bebeauty.com/]แฟชั่นเสื้อผ้าเกาหลี[/direct]
[direct=https://www.proudyourstyle.com/]Bunion Corrector Pain Relief[/direct]

NooNaamz

อ้างถึงจาก: slasz ใน 01 พฤษภาคม 2014, 20:47:20
อ้างถึงจาก: NooNaamz ใน 01 พฤษภาคม 2014, 19:45:08
อ้างถึงจาก: slasz ใน 01 พฤษภาคม 2014, 18:21:34
อ้างถึงจาก: NooNaamz ใน 01 พฤษภาคม 2014, 18:10:59
หนูมีตารางแบบนี้
tableName
+------+------------------------+
|  ID  |          Name          |
+------+------------------------+
|  01  | Mr.A01                 |
|  02  | Mr.A02                 |
|  03  | Mr.A03                 |
|  04  | Mr.A04                 |
|  05  | Mr.A05                 |
|  06  | Mr.A06                 |
|  07  | Mr.A07                 |
|  08  | Mr.A08                 |
+------+------------------------+
tableSalay
+-------+------+------------+-----------+
|  mID  |  ID  |   Salary   |    Tax    | 
+-------+------+------------+-----------+
|   1   |  01  |  20,000.00 |  1,000.00 |
|   1   |  02  |  20,000.00 |  1,000.00 |
|   1   |  03  |  20,000.00 |  1,000.00 |
|   1   |  04  |  20,000.00 |  1,000.00 |
|   1   |  05  |  20,000.00 |  1,000.00 |
|   2   |  01  |  20,000.00 |  1,000.00 |
|   2   |  02  |  20,000.00 |  1,000.00 |
|   2   |  03  |  20,000.00 |  1,000.00 |
|   2   |  04  |  20,000.00 |  1,000.00 |
|   2   |  05  |  20,000.00 |  1,000.00 |
|   2   |  06  |  20,000.00 |  1,000.00 |
|   2   |  07  |  20,000.00 |  1,000.00 |
|   2   |  08  |  20,000.00 |  1,000.00 |
+-------+------+------------+-----------+
tableMonth
+-------+-----------+
|  mID  |   Month   |
+-------+-----------+
|   1   |  01-2014  |
|   2   |  02-2014  |
+-------+-----------+

หนูต้องการ จะ select ให้ ออกมาเป็นหน้าตาแบบนี้
+------------------------+-----------+
|          Name          |    Tax    |
+------------------------+-----------+
| Mr.A01                 |  2,000.00 |
| Mr.A02                 |  2,000.00 |
| Mr.A03                 |  2,000.00 |
| Mr.A04                 |  2,000.00 |
| Mr.A05                 |  2,000.00 |
| Mr.A06                 |  1,000.00 |
| Mr.A07                 |  1,000.00 |
| Mr.A08                 |  1,000.00 |
+------------------------+-----------+

หนูจะต้องเขียน query อย่างไรค่ะ
ขอบพระคุณทุกๆท่านค่ะ

SELECT tableName.Name, sum(tableSalary.Tax) FROM tableName INNER JOIN tableSalary ON tableName.ID = tableSalary.ID
GROUP BY  tableName.Name, tableSalary.Tax

กรณีเอา Tax มาบวกกัน

ไม่ได้คะ มันยังออกมา มี tableName.Name ซ้ำกัน  :wanwan012: :wanwan012:

ลองตัวใหม่ที่มีการ GROUP BY เข้าไปยังครับ
ใส่ group by tableName.Name  เข้าไปแล้วค่ะ มันก็ยังซ้ำ

raimai

มันต้องมีชื่อซ้ำแน่นอนครับเพราะเราเรียก 2 ครั้งเพื่อมาเช็คให้ค่าเท่ากัน

คำถามคือมันคืนค่ามาแล้วมี field ที่ซ้ำกันก็จริง แต่ทำไมตอนเรียกใช้งานไม่ตัดออกเองหละครับ

Synchronize

select t1.Name, sum(t2.Tax) as Tax
from tableName t1, tableSalay t2, tableMonth t3
where t1.ID = t2.ID and t2.mID = t3.mID
group by t1.Name


ลองแบบนี้ดูครับ อันนี้เขียนสดๆ ไมไ่ด้ทดสอบ นะครับ

:wanwan017:
เนื้อหาความรู้น่าสนใจ ใหม่ๆ
[direct=https://develop.un-no.com/w3/docs/clear-float-in-div]เทคนิคการแก้ไขปัญหาจากการ float ซ้อน float แล้ว clear[/direct]

[direct=https://service.un-no.com/unbbz]ทำเว็บได้ด้วยตัวเองฟรี ด้วยระบบเว็บสำเร็จรูป unbbz , เว็บธรรมดา , เว็บบอร์ด , เว็บขายของ ทำได้หมดเลย[/direct]

insidecom

อา้งถึงข้างบนนะครับ

SELECT tableName.Name, sum(tableSalary.Tax) FROM tableName INNER JOIN tableSalary ON tableName.ID = tableSalary.ID
GROUP BY  tableName.Name, tableSalary.Tax

ผมว่า Group by ID ดูครับ ลองเปลี่ยนเป็น

SELECT tableName.Name, sum(tableSalary.Tax) FROM tableName INNER JOIN tableSalary ON tableName.ID = tableSalary.ID
GROUP BY  tableSalary.ID

ไม่รู็ได้หรือเปล่านะ ลองดูครับ

แต่ถ้าจะแยกเป็นเดือน ลองดู query ด้านล่างนี้ครับ
SELECT tableName.Name, sum(tableSalary.Tax)as SumTax , tableMonth.Month    FROM tableName
INNER JOIN tableSalary ON tableName.ID = tableSalary.ID
INNER JOIN tableMonth ON tableSalary.mID = tableMonth.mID
GROUP BY  tableSalary.ID ,tableMonth.mID

Punisher

อ้างถึง
create table #TmptableName (
      Tmpid      varchar(25),
      TmpName      varchar(100))
Insert #TmptableName values ('01','Mr.A01')
Insert #TmptableName values ('02','Mr.A02')
Insert #TmptableName values ('03','Mr.A03')
Insert #TmptableName values ('04','Mr.A04')
Insert #TmptableName values ('05','Mr.A05')
Insert #TmptableName values ('06','Mr.A06')
Insert #TmptableName values ('07','Mr.A07')
Insert #TmptableName values ('08','Mr.A08')
select * from #TmptableName

create table #TmptableSalay (
      TmpMid      varchar(1),
      Tmpid      varchar(25),
      TmpSalary   int,
      Tmptax      int)
Insert #TmptableSalay values ('1','01',20000,1000)
Insert #TmptableSalay values ('1','02',20000,1000)
Insert #TmptableSalay values ('1','03',20000,1000)
Insert #TmptableSalay values ('1','04',20000,1000)
Insert #TmptableSalay values ('1','05',20000,1000)
Insert #TmptableSalay values ('2','01',20000,1000)
Insert #TmptableSalay values ('2','02',20000,1000)
Insert #TmptableSalay values ('2','03',20000,1000)
Insert #TmptableSalay values ('2','04',20000,1000)
Insert #TmptableSalay values ('2','05',20000,1000)
Insert #TmptableSalay values ('2','06',20000,1000)
Insert #TmptableSalay values ('2','07',20000,1000)
Insert #TmptableSalay values ('2','08',20000,1000)
select * from #TmptableSalay

create table #TmptableMonth (
      TmpMid      varchar(1),
      TmpMonth   varchar(50))
Insert #TmptableMonth values ('1','1-2014' )
Insert #TmptableMonth values ('2','2-2014')
select * from #TmptableMonth
---------------------------------------------------------------------

select b.tmpname,sum(a.tmptax) as tax  from #TmptableSalay as a inner join #TmptableName as b  on b.Tmpid=a.Tmpid group by b.tmpid,tmpname

---------------------------------------------------------------------

drop table #TmptableName
drop table #TmptableSalay
drop table #TmptableMonth
ลองเอาไปประยุกต์ดูครับ :wanwan007:

Mayjung007

#11
select name.name,sum(salary.tax) as tax from name,salary,month where
name.id = saraly.id and month.mID = salary.mID
group by name.id


ผมว่าสั้นๆแค่นี้ละมั้งคับ ไม่รู็นะคับบ ยังไม่ได้รัน ^^  :P

killer777

แนะนำ LEFT JOIN ครับ

SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name=table2.column_name;


link >> http://www.w3schools.com/sql/sql_join_left.asp

jeking


pkr4life


SELECT N.Name, T.TotalTax
FROM tableName N
INNER JOIN (SELECT ID, SUM(Tax) AS TotalTax
FROM tableSalary
GROUP BY ID) AS T ON N.ID = T.ID
[direct=https://prakunrod.com/Affiliate.aspx][/direct]
ค่าคอมสูงสุด 250 บ./Order เหมาะกับเว็บทุกประเภท มี banner หลายขนาดให้เลือก -- ยินดี support สมาชิก ThaiSeo ทุกท่านครับ

[direct=http://prakunrod.com]ประกันภัยรถยนต์[/direct] [direct=http://www.prakunrod.com/ViewInsuranceCompany.aspx?InsuranceCompanyID=1]วิริยะประกันภัย[/direct] [direct=http://www.prakunrod.com/ViewInsuranceCompany.aspx?InsuranceCompanyID=2]กรุงเทพประกันภัย[/direct]

atcomink

เว็บไซต์ในเครือ
[direct=https://www.kruaof.com] เว็บครูออฟ [/direct]
[direct=https://www.thaitestonline.com] ไทยเทสออนไลน์ [/direct]
[direct=https://youtube.com/c/STANDINGTEACHER] YouTube : ครูออฟสอนคอมพิวเตอร์ [/direct]