Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,038

HOME > PHP > PHP Forum > sum ตัวเลขจากการ union จาก 2 บรรทัดให้เหลือ 1 บรรทัด (อธิบายไม่ถูก มีภาพประกอบ)


[PHP] sum ตัวเลขจากการ union จาก 2 บรรทัดให้เหลือ 1 บรรทัด (อธิบายไม่ถูก มีภาพประกอบ)

 
Topic : 114532



โพสกระทู้ ( 129 )
บทความ ( 0 )



สถานะออฟไลน์



จะทำยังไงให้รายการที่มีรหัสเดียวกัน แต่มีการแยกประเภทไว้ sum ให้รวมเป็นบรรทัดเดียวกัน
ตอนทำจริงคอลัม ประเภทจะไม่เอามาแสดง

01



Tag : PHP, Ms SQL Server 2008, HTML/CSS

Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2015-02-19 15:37:30 By : AnnYZaa View : 3439 Reply : 26
 

 

No. 1



โพสกระทู้ ( 1,150 )
บทความ ( 0 )



สถานะออฟไลน์
Facebook

sum(ฟิวที่ต้องการ) ละ group by รหัส ได้มะ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-02-19 15:39:04 By : progamer2000
 

 

No. 2



โพสกระทู้ ( 129 )
บทความ ( 0 )



สถานะออฟไลน์


ไม่ได้ค่ะ

ขออภัยนะคะ ไม่กล้าลงโค้ดเต็มๆ

Code (PHP)
01.รหัส,
02.ISNULL(SUM(round(เดบิต.ยอดปัจจุบัน,2)),0.00)เดบิต.ยอดปัจจุบัน,
03.ISNULL(SUM(round(เครดิต.ยอดปัจจุบัน,2)),0.00)เครดิต.ยอดปัจจุบัน,
04.    0 ยอดยกมา
05. 
06.from ......................
07.where ประเภท=101
08.group by รหัส
09. 
10.union
11. 
12.รหัส,
13.    0 เดบิต.ยอดปัจจุบัน,
14.    0 เครดิต.ยอดปัจจุบัน,
15.    SUM(ISNULL(round(DrAmnt,2),0.00) - ISNULL(round(CrAmnt,2),0.00))ยอดยกมา
16. 
17.from ......................
18.where ประเภท=105
19.group by รหัส



ประวัติการแก้ไข
2015-02-19 16:13:00
2015-02-19 16:14:56
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-02-19 16:12:15 By : AnnYZaa
 

 

No. 3



โพสกระทู้ ( 1,150 )
บทความ ( 0 )



สถานะออฟไลน์
Facebook

แต่ละ table sum กันก่อนมา union ได้ไหมฮะ ?
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-02-19 16:31:28 By : progamer2000
 

 

No. 4

Guest


ตอบความคิดเห็นที่ : 2 เขียนโดย : AnnYZaa เมื่อวันที่ 2015-02-19 16:12:15
รายละเอียดของการตอบ ::
เห็น 101 และ 105 ก็พอจะเดาชื่อโปรแกรมออก ถึงคุณจะลง Query เต็ม เจ้าของโปรแกรมเขาก็ไม่ว่า
และมันก็ไม่มีประโยชน์สำหรับผมแม้แต่นิดเดียว (วิธีคิดของผมและโปรแกรมของเขามันคนละแนวทางกัน)




ลองทำความเข้าใจดูครับ CTE (Common Table Expression)

Code (SQL)
01.DECLARE @ASSINASSOUT TABLE (ID int, PurchaseCost money, PurchaseDate Date, Period int, Savage decimal(6,2))
02.INSERT INTO @ASSINASSOUT SELECT 1, 25000, '2014-12-29', 5*12, 20.0/100
03.;WITH cte
04.AS (
05.    SELECT     -- anchor member
06.        CAST(0 AS int) AS m, PurchaseCost AS PurchaseCost, PurchaseDate As PurchaseDate,
07.        Period AS Period, PurchaseDate AS StartdayOfMonth,
08.        CAST(DATEADD(mm, DATEDIFF(mm, 0, PurchaseDate) + 1, 0) -1 AS DATE) AS LastdayOfMonth,
09.        var00 AS DayDiff, CAST(((((PurchaseCost-1) * (20*1.0/100))/var02) * var00) AS money) AS DepreAmount,
10.        PurchaseCost AS BookValue, CAST(0 AS money) AS AccumDepre, CAST(DATEPART(dy, CAST(YEAR(var01) AS CHAR(4)) + '-12-31') AS int) AS DaysOfYear
11.    FROM @ASSINASSOUT CROSS APPLY (SELECT var00 = CAST(DATEDIFF(Day, PurchaseDate, DATEADD(mm, DATEDIFF(mm, 0, PurchaseDate) + 1, 0) -1) + 1 AS int),
12.                                     var01 = CAST(DATEADD(mm, DATEDIFF(mm, 0, PurchaseDate) + 1, 0) -1 AS DATE),
13.                                     var02 = CAST(DATEPART(dy, CAST(YEAR(CAST(DATEADD(mm,
14.                                                  DATEDIFF(mm, 0, DATEADD(mm, 0, PurchaseDate)), 0) AS Date)) AS CHAR(4)) + '-12-31') AS int)) a   
15.    UNION ALL  
16.    SELECT     -- recursive member
17.        m + 1, PurchaseCost, PurchaseDate, Period,
18.        var11 AS StartdayOfMonth,
19.        CAST(DATEADD(mm, DATEDIFF(mm, -1, DATEADD(mm, m + 1, PurchaseDate)), 0) - 1 AS Date) AS LastdayOfMonth, var10 AS DaysDiff,
20.        CASE m + 1 WHEN Period THEN DepreAmount ELSE CAST((PurchaseCost-1) * (20*1.0/100)/var12 * var10 AS money) END AS DepreAmount,
21.        CASE m + 1 WHEN Period THEN CAST(0 AS money) ELSE BookValue - DepreAmount END AS BookValue,
22.        CASE m + 1 WHEN Period THEN AccumDepre + BookValue ELSE AccumDepre + DepreAmount END AS AccumDepre,
23.        DATEPART(dy, CAST(YEAR(var11) AS CHAR(4)) + '-12-31') AS DaysOfYear
24.    FROM cte CROSS APPLY (SELECT var10 = DATEDIFF(Day,DATEADD(mm, DATEDIFF(mm, 0, DATEADD(mm, m + 1, PurchaseDate)), 0),
25.                                         DATEADD(mm, DATEDIFF(mm, -1, DATEADD(mm, m + 1, PurchaseDate)), 0) - 1 ) + 1,
26.                                 var11 = CAST(DATEADD(mm, DATEDIFF(mm, 0, DATEADD(mm, m + 1, PurchaseDate)), 0) AS Date),
27.                                 var12 = CAST(DATEPART(dy, CAST(YEAR(CAST(DATEADD(mm,
28.                                              DATEDIFF(mm, 0, DATEADD(mm, m + 1, PurchaseDate)), 0) AS Date)) AS CHAR(4)) + '-12-31') AS int)) b
29.    WHERE m < Period -- terminator
30.    )
31.    SELECT * FROM cte

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-02-19 16:55:24 By : หน้าฮี
 

 

No. 5

Guest


ผลลัพธ์ของ Query ด้านบน

x_ass_x_result

ลองทำความเข้าใจดูครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-02-19 16:57:30 By : หน้าฮี
 

 

No. 6



โพสกระทู้ ( 129 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 4 เขียนโดย : หน้าฮี เมื่อวันที่ 2015-02-19 16:55:24
รายละเอียดของการตอบ ::
ขอบคุณค่ะ แต่ตัวเลข 101 และ 105 เป็นตัวเลขที่สมมุติขึ้นมาจริงๆ ค่ะ
จริงๆ ไม่ได้กลัวเจ้าของโปรแกรมว่าค่ะ แต่เจอบางคนมาบอกว่าเสียเวลาที่จะมาแก้โปรแกรมเหล่านี้ ถ้าเป็นเค้าเค้าไม่ทำ ก็เลยไม่อยากจะอธิบายค่ะ

ขอบคุณนะคะเดี๋ยวลองทำความเข้าใจดูก่อน

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-02-19 17:19:40 By : AnnYZaa
 

 

No. 7



โพสกระทู้ ( 9,590 )
บทความ ( 2 )



สถานะออฟไลน์


เอามาลงเถอะครับจะได้่ช่วยได้ อย่าไปสนใจพวก หมูหมากาไก่ที่ ชอบแขวะ แต่ไม่ช่วย

ผมช่วยทุกคน อาจจะมีแขวะมีเหน็บบ้าง ก็บางครั้ง แต่ก็เพื่อประโยชน์ของ ผู้ถามนะครับ
คือบางคนต้องตีต้องทุบถึงจะรู้สึกอะครับ แค่พูดบอกอย่างเดียวไม่ค่อยรู้สึกรู้สา 5555
เด็กแต่ละคนต้องใช้วิธีการต่างกัน เพื่อให้ได้ผลลัพธ์ตามต้องการ

เข้าเรื่องคำสั่งข้างล่าง ควรจะมี AS หรือเปล่าครับ mssql รู้สึกต้องมี as นะครับ
Code (SQL)
1.ISNULL(SUM(round(เดบิต.ยอดปัจจุบัน,2)),0.00)เดบิต.ยอดปัจจุบัน,

แก้เป็น
Code (SQL)
1.ISNULL(SUM(round(เดบิต.ยอดปัจจุบัน,2)),0.00) as เดบิต.ยอดปัจจุบัน,


ปล.มี error อะไรหรือเปล่าครับ

ปล.อีกที่น่าจะเป็นแบบนี้
Code (SQL)
1.round( SUM( ISNULL(เดบิต.ยอดปัจจุบัน, 0)),2) as เดบิต.ยอดปัจจุบัน,



ประวัติการแก้ไข
2015-02-19 17:37:16
2015-02-19 17:40:32
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-02-19 17:35:42 By : Chaidhanan
 

 

No. 8



โพสกระทู้ ( 129 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 7 เขียนโดย : Chaidhanan เมื่อวันที่ 2015-02-19 17:35:42
รายละเอียดของการตอบ ::
ขอบคุณค่ะ



ประวัติการแก้ไข
2015-02-20 09:14:26
2015-02-20 13:33:20
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-02-20 09:13:20 By : AnnYZaa
 

 

No. 9



โพสกระทู้ ( 535 )
บทความ ( 0 )



สถานะออฟไลน์


เอารวมกันแล้วประเภทมันจะเลือกจากเงือนไขอะไรคับ เหมมือนที่ยกตัวอย่างมา 101,105 รวมกันได้ 105 ใช้เงื่อนไขอะไร ถึงได้ 105 ครับ รวมกันไม่ไม่น่าอยาก นะ แต่ประเภทที่มันจะโชว์ใช้เงื่อนไขอะไร อะ
รวมกันแค่ตัดประเภทแล้ว group by รหัสก็ได้แล้ว ครับแต่ปัญหาอยู่ที่ประเภท
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-02-20 09:38:45 By : gaowteen
 

 

No. 10



โพสกระทู้ ( 129 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 9 เขียนโดย : gaowteen เมื่อวันที่ 2015-02-20 09:38:45
รายละเอียดของการตอบ ::
ตรงคอลัมประเภท จริงๆ แล้วไม่โชว์ค่ะ ที่ได้ 105 แค่ทำให้มองเห็นภาพเฉยๆ ว่ามันจะเหลือแถวเดียว จริงๆ จะตัดคอมลัมนั้นออก แต่ลืมค่ะ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-02-20 09:46:16 By : AnnYZaa
 

 

No. 11



โพสกระทู้ ( 535 )
บทความ ( 0 )



สถานะออฟไลน์


งั้นก็ ตัด ประเภทออก เอา select ครอบอีกชั้น แล้ว sum ครับ group by รัส
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-02-20 10:10:05 By : gaowteen
 

 

No. 12



โพสกระทู้ ( 9,590 )
บทความ ( 2 )



สถานะออฟไลน์


ผมอ่านโค๊ดแล้วงง นะครับ คือ บางตารางที่อ้างอิ่งก็ไม่มี ชื่อฟีลด์ สำหรับ select หรือ อยู่ใน where ใน group
ที่เห็น ก็มี EMAcc GLDT ตัวอื่นที่ join เช่น EMDept, EMJob, EMBrch ไม่เห็นได้ใช้

ลองดูใหม่นะครับ ผมเอา จากตารางที่เห็นข้อมูล มาคิวรี่ แล้วไปประยุกต์เอาเองนะครับ
เป็นรายการ เฉพาะ GLDT.DrAmnt และ GLDT.CRAmnt เท่านั้น เพราะผมไม่เห็นข้อมูล ของอันอื่น
Code (SQL)
01.SELECT
02.    EM.AccCode,
03.    EM.AccName,
04.    ROUND( SUM ( ISNULL(GL.DrAmnt, 0) ), 2) as Dr,
05.    ROUND( SUM ( ISNULL(GL.CrAmnt, 0) ), 2) as Cr,
06. 
07.FROM EMAcc as EM
08.LEFT OUTER JOIN GLDT as GL
09.    ON GL.AccID = EM.AccID
10.        AND GL.DocuStatus = 'N'
11.        AND GL.DocuType IN (501)
12.        AND CONVERT(VARCHAR(8),GL.DocuDate,112) between '20140801' AND '20140801'
13.        AND GL.BrchID = 1
14.GROUP BY EM.AccCode, EM.AccName


ถ้าเห็นตารางดิบ ด้วยจะทำให้เข้าใจมากกว่านี้


ประวัติการแก้ไข
2015-02-20 10:26:56
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-02-20 10:25:45 By : Chaidhanan
 

 

No. 13

Guest


Code (SQL)
01.;WITH cte1
02.AS
03. 
04.(
05.SELECT  EMAcc.AccID,
06.    EMAcc.AccCode,
07.    EMAcc.AccName,
08.    EMAcc.AccNameEng,
09.    round( SUM( ISNULL(GLDT.DrAmnt, 0)),2) as DrAmntCurr,
10.    round( SUM( ISNULL(GLDT.CrAmnt, 0)),2) as CrAmntCurr,
11.    0 Beginn, 'หอยอ้า' AS Sex
12. 
13.FROM EMAcc LEFT OUTER JOIN GLDT ON ((GLDT.AccID = EMAcc.AccID)
14.        AND (GLDT.DocuStatus = 'N')
15.        AND (GLDT.DocuType IN (501))
16.        AND (CONVERT(VARCHAR(8),GLDT.DocuDate,112) between '20140801' AND '20140801')
17.        AND ((GLDT.BrchID = 1) OR (1 = 0)))
18.    LEFT OUTER JOIN EMJOb ON (GLDT.JobID = EMJOb.JobID)
19.    LEFT OUTER JOIN EMDept ON (GLDT.DeptID = EMDept.DeptID)
20.    LEFT OUTER JOIN EMBrch ON (GLDT.BrchID = EMBrch.BrchID)
21.WHERE   EMAcc.AccControlFlag = '1'
22.       
23.AND   ( emacc.acccode between '111216.000' and '111220.000'
24.       
25.AND ( GLDT.AccID is not null
26.GROUP BY EMAcc.AccID,
27.    EMAcc.AccCode,
28.    EMAcc.AccName,
29.    EMAcc.AccNameEng
30.UNION  
31.SELECT  EMAcc.AccID,
32.    EMAcc.AccCode,
33.    EMAcc.AccName,
34.    EMAcc.AccNameEng,
35.    0 DrAmnt,
36.    0 CrAmnt,
37.    SUM(ISNULL(round(DrAmnt,2),0.00) - ISNULL(round(CrAmnt,2),0.00))as Beginn, 'หอยอ้า' AS Sex
38. 
39.FROM EMAcc LEFT OUTER JOIN GLDT ON ((GLDT.AccID = EMAcc.AccID)
40.        AND (GLDT.DocuStatus = 'N')
41.        AND ( ((GLDT.DocuType = 503) AND (CONVERT(VARCHAR(8),GLDT.DocuDate,112) = '20131231')))
42.        AND ((GLDT.BrchID = 1) OR (1 = 0)))
43.    LEFT OUTER JOIN EMDept ON (GLDT.DeptID = EMDept.DeptID)
44.    LEFT OUTER JOIN EMJob ON (GLDT.JobID= EMJob.JobID)
45.    LEFT OUTER JOIN EMBrch ON (GLDT.BrchID = EMBrch.BrchID)
46.WHERE   EMAcc.AccControlFlag = '1'
47.       
48.AND (   emacc.acccode between '111216.000' and '111220.000'
49.       
50.AND ( GLDT.AccID is not null
51.GROUP BY EMAcc.AccID,
52.    EMACC.AccCode,
53.    EMAcc.AccName,
54.    EMAcc.AccNameEng
55. 
56.)
57.SELECT cte1.AccID, SUM(cte1.DrAmntCurr) AS DrAmntCurr, SUM(cte1.CrAmntCurr) AS CrAmntCurr FROM cte1 
58.LEFT JOIN cte1 หอยสด ON cte1.Sex = หอยสด.Sex
59.GROUP BY cte1.Sex, cte1.AccID, cte1.AccCode, cte1.AccName, cte1.AccNameEng

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-02-20 12:56:15 By : หน้าฮี
 

 

No. 14

Guest


SQL Query Joke

Code (SQL)
01.GO
02.GO
03.GO 3 WITH ME
04. 
05.ALTER procedure [dbo].[spu_icstockcost_FIFO]
06.    @StockCostID    u_id ,
07.    @docutype   int ,
08.    @docutypecode   varchar(1),
09.    @docuid     u_id ,
10.    @listno     u_listno ,
11.    @goodid     u_id ,
12.    @brchid     u_id ,
13.    @costamnt   u_amnt output as
14.begin
15.    --  เพื่อใช้ในการรับข้อมูลที่ได้จากการทำงานของ Query
16.    declare @outamnt    u_amnt
17.    --  ดึงข้อมูลจากรายการโดยไม่รวมต้นทุนที่เกิดจาก Trigger ซึ่งคือคัวมันเองหากส่งเป็น 0 แปลว่าเอารายการต้นทุนทั้งเอกสาร
18.    select  @outamnt = Convert(decimal(19,4),isnull(Sum
19.              (Case icstockcost.StockFlag When 1
20.              /*การรับเข้า*/
21.              Then (Case When (isnull(icstockcost.InQty,0) = 0) and (isnull(icstockcost.InAmnt,0) = 0)and
22.                      (isnull(icstockcost.OutQty,0)<> 0)and (isnull(icstockcost.OutAmnt,0) = 0)
23.                      Then 0
24.                 When (isnull(icstockcost.OutQty,0) > 0)and(isnull(icstockcost.OutAmnt,0) > 0)
25.                      Then Convert(decimal(19,4),isnull(icstockcost.ReceAmnt,0))
26.                 When (isnull(icstockcost.InQty,0) = 0)and (isnull(icstockcost.InAmnt,0) = 0)and
27.                      (isnull(icstockcost.OutQty,0) = 0)and (isnull(icstockcost.OutAmnt,0) = 0)    
28.                      Then 0
29.                Else 0 End)
30.              /*การจ่ายออก*/
31.              Else (Case When (isnull(icstockcost.InQty,0) > 0)and (isnull(icstockcost.InAmnt,0) > 0)and
32.                      (isnull(icstockcost.OutQty,0) = 0)and (isnull(icstockcost.OutAmnt,0) = 0)
33.                      Then (Case  When isnull(icstockcost.Inqty,0) = 0
34.                              Then 0
35.                              Else (Convert(decimal(19,4),isnull(icstockcost.InAmnt,0))*
36.                                Convert(decimal(19,4),isnull(icstockcost.payqty,0)))/
37.                                Convert(decimal(19,4),isnull(icstockcost.Inqty,0))
38.                       End )
39.                 When (isnull(icstockcost.InQty,0) = 0)and (isnull(icstockcost.InAmnt,0) = 0)and
40.                      (isnull(icstockcost.OutQty,0) = 0)and (isnull(icstockcost.OutAmnt,0) = 0)
41.                      Then Convert(decimal(19,4),isnull(icstockcost.payamnt,0))
42.                When (isnull(icstockcost.InQty,0) = 0)and (isnull(icstockcost.InAmnt,0) = 0)and
43.                      (isnull(icstockcost.OutQty,0) < 0)and (isnull(icstockcost.OutAmnt,0) = 0) 
44.                      Then 0
45.                 Else (Case  When isnull(icstockcost.Inqty,0) = 0
46.                              Then 0
47.                              Else (Convert(decimal(19,4),isnull(icstockcost.InAmnt,0))*
48.                                Convert(decimal(19,4),isnull(icstockcost.payqty,0)))/
49.                                Convert(decimal(19,4),isnull(icstockcost.Inqty,0))
50.                             End )
51.                 End)
52.              End),0))
53.    from    icstockcost
54.    where   (icstockcost.GoodID = @goodid) and
55.        (icstockcost.DocuType = @docutype) and
56.        (icstockcost.DocuTypeCode = @docutypecode) and
57.        (icstockcost.BrchID = @brchid) and
58.        (icstockcost.DocuID = @docuid) and
59.        (icstockcost.ListNo = @listno) and
60.        (icstockcost.StockCostID <> @StockCostID)
61.    -- select ค่าข้อมูลเพื่อ Return ค่า่ข้อมูล
62.    select @costamnt= isnull(@outamnt,0)
63.end

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-02-20 13:04:36 By : หน้าฮี
 

 

No. 15

Guest


จาก #NO13 เดี๋ยวคุณงง Order By หายไปไหนหว่า

Code (SQL)
01.;WITH cte1
02.AS
03. 
04.(
05.SELECT  EMAcc.AccID,
06.    EMAcc.AccCode,
07.    EMAcc.AccName,
08.    EMAcc.AccNameEng,
09.    round( SUM( ISNULL(GLDT.DrAmnt, 0)),2) as DrAmntCurr,
10.    round( SUM( ISNULL(GLDT.CrAmnt, 0)),2) as CrAmntCurr,
11.    0 Beginn, 'หอยอ้า' AS Sex
12. 
13.FROM EMAcc LEFT OUTER JOIN GLDT ON ((GLDT.AccID = EMAcc.AccID)
14.        AND (GLDT.DocuStatus = 'N')
15.        AND (GLDT.DocuType IN (501))
16.        AND (CONVERT(VARCHAR(8),GLDT.DocuDate,112) between '20140801' AND '20140801')
17.        AND ((GLDT.BrchID = 1) OR (1 = 0)))
18.    LEFT OUTER JOIN EMJOb ON (GLDT.JobID = EMJOb.JobID)
19.    LEFT OUTER JOIN EMDept ON (GLDT.DeptID = EMDept.DeptID)
20.    LEFT OUTER JOIN EMBrch ON (GLDT.BrchID = EMBrch.BrchID)
21.WHERE   EMAcc.AccControlFlag = '1'
22.       
23.AND   ( emacc.acccode between '111216.000' and '111220.000'
24.       
25.AND ( GLDT.AccID is not null
26.GROUP BY EMAcc.AccID,
27.    EMAcc.AccCode,
28.    EMAcc.AccName,
29.    EMAcc.AccNameEng
30.UNION  
31.SELECT  EMAcc.AccID,
32.    EMAcc.AccCode,
33.    EMAcc.AccName,
34.    EMAcc.AccNameEng,
35.    0 DrAmnt,
36.    0 CrAmnt,
37.    SUM(ISNULL(round(DrAmnt,2),0.00) - ISNULL(round(CrAmnt,2),0.00))as Beginn, 'หอยอ้า' AS Sex
38. 
39.FROM EMAcc LEFT OUTER JOIN GLDT ON ((GLDT.AccID = EMAcc.AccID)
40.        AND (GLDT.DocuStatus = 'N')
41.        AND ( ((GLDT.DocuType = 503) AND (CONVERT(VARCHAR(8),GLDT.DocuDate,112) = '20131231')))
42.        AND ((GLDT.BrchID = 1) OR (1 = 0)))
43.    LEFT OUTER JOIN EMDept ON (GLDT.DeptID = EMDept.DeptID)
44.    LEFT OUTER JOIN EMJob ON (GLDT.JobID= EMJob.JobID)
45.    LEFT OUTER JOIN EMBrch ON (GLDT.BrchID = EMBrch.BrchID)
46.WHERE   EMAcc.AccControlFlag = '1'
47.       
48.AND (   emacc.acccode between '111216.000' and '111220.000'
49.       
50.AND ( GLDT.AccID is not null
51.GROUP BY EMAcc.AccID,
52.    EMACC.AccCode,
53.    EMAcc.AccName,
54.    EMAcc.AccNameEng
55. 
56.)
57.SELECT cte1.AccID, cte1.AccCode, cte1.AccName, cte1.AccNameEng,
58.SUM(cte1.DrAmntCurr) AS DrAmntCurr, SUM(cte1.CrAmntCurr) AS CrAmntCurr, cte1.Sex
59.FROM cte1 
60.LEFT JOIN cte1 AS หอยสด ON cte1.Sex = หอยสด.Sex
61.GROUP BY cte1.Sex, cte1.AccID, cte1.AccCode, cte1.AccName, cte1.AccNameEng
62.ORDER BY cte1.AccCode




@Bird มันไม่มีก็สร้างขึ้นมา สังเกตุ "หอยสด" เอามาทำคีย์ (ไม่ได้เอามาทำเมีย)
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-02-20 13:20:55 By : หน้าฮี
 

 

No. 16



โพสกระทู้ ( 129 )
บทความ ( 0 )



สถานะออฟไลน์


ทำได้แล้วค่ะ ขอบคุณมากๆ ค่ะ
ใช้วิธีเอา select มาครอบอีกทีนึง ตามที่คุณBIrD บอกมาค่ะ

**ขออนุญาตลบโค้ดออกนะคะ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-02-20 13:26:49 By : AnnYZaa
 

 

No. 17



โพสกระทู้ ( 9,590 )
บทความ ( 2 )



สถานะออฟไลน์


....


ประวัติการแก้ไข
2015-02-20 17:37:09
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-02-20 15:10:56 By : Chaidhanan
 

 

No. 18



โพสกระทู้ ( 129 )
บทความ ( 0 )



สถานะออฟไลน์


.......

ลงโค้ดให้นะคะ
ิอันนี้เป็นโค้ดก่อแก้ค่ะ

Code (PHP)
01.SELECT  EMAcc.AccID,
02.    EMAcc.AccCode,
03.    GLDT.DocuType,
04.    EMAcc.AccName,
05.    EMAcc.AccNameEng,
06.    ISNULL(SUM(round(GLDT.DrAmnt,2)),0.00)DrAmnt,
07.    ISNULL(SUM(round(GLDT.CrAmnt,2)),0.00)CrAmnt,
08.    0 Beginn
09. 
10.FROM EMAcc LEFT OUTER JOIN GLDT ON ((GLDT.AccID = EMAcc.AccID)
11.        AND (GLDT.DocuStatus = 'N')
12.        AND (GLDT.DocuType IN (501))
13.        AND (CONVERT(VARCHAR(8),GLDT.DocuDate,112) between '20140801' AND '20140801')
14.        AND ((GLDT.BrchID = 1) OR (1 = 0)))
15.    LEFT OUTER JOIN EMJOb ON (GLDT.JobID = EMJOb.JobID)
16.    LEFT OUTER JOIN EMDept ON (GLDT.DeptID = EMDept.DeptID)
17.    LEFT OUTER JOIN EMBrch ON (GLDT.BrchID = EMBrch.BrchID)
18.WHERE   EMAcc.AccControlFlag = '1'
19.       
20.AND (  ( emacc.acccode between '111000.010' and '111501.000' )  ) 
21.       
22.AND ( GLDT.AccID is not null ) 
23.GROUP BY EMAcc.AccID,
24.    EMAcc.AccCode,
25.    GLDT.DocuType,
26.    EMAcc.AccName,
27.    EMAcc.AccNameEng
28. 
29. 
30. 
31.UNION
32. 
33.SELECT  EMAcc.AccID,
34.    EMAcc.AccCode,
35.    GLDT.DocuType,
36.    EMAcc.AccName,
37.    EMAcc.AccNameEng,
38.    0 DrAmnt,
39.    0 CrAmnt,
40.    SUM(ISNULL(round(DrAmnt,2),0.00) - ISNULL(round(CrAmnt,2),0.00))Beginn
41. 
42.FROM EMAcc LEFT OUTER JOIN GLDT ON ((GLDT.AccID = EMAcc.AccID)
43.        AND (GLDT.DocuStatus = 'N')
44.        AND (((GLDT.DocuType = 501) AND (CONVERT(VARCHAR(8),GLDT.DocuDate,112) BETWEEN '20140801' AND '20140801'))
45.                OR ((GLDT.DocuType = 503) AND (CONVERT(VARCHAR(8),GLDT.DocuDate,112) = '20131231')))
46.        AND ((GLDT.BrchID = 1) OR (1 = 0)))
47.    LEFT OUTER JOIN EMDept ON (GLDT.DeptID = EMDept.DeptID)
48.    LEFT OUTER JOIN EMJob ON (GLDT.JobID= EMJob.JobID)
49.    LEFT OUTER JOIN EMBrch ON (GLDT.BrchID = EMBrch.BrchID)
50.WHERE   EMAcc.AccControlFlag = '1'
51.       
52.AND (  ( emacc.acccode between '111000.010' and '111501.000' )  ) 
53.       
54.AND ( GLDT.AccID is not null ) 
55.GROUP BY EMAcc.AccID,
56.    EMACC.AccCode,
57.    GLDT.DocuType,
58.    EMAcc.AccName,
59.    EMAcc.AccNameEng
60.order by EMAcc.AccCode



อันนี้แก้ว มีการครอบ select 2 ชั้น เพราะ ทำการ sum 2 รอบค่ะ

Code (PHP)
01.select LEFT(AccCode,6) as AccCode,sum(DrAmntCurr) as DrAmntCurr ,sum(CrAmntCurr) as CrAmntCurr,sum(Beginn)as Beginn
02.from (
03. 
04.    select LEFT(AccCode,6) as AccCode,sum(DrAmntCurr) as DrAmntCurr ,sum(CrAmntCurr) as CrAmntCurr,sum(Beginn)as Beginn
05.    from (
06.    SELECT
07.        EMAcc.AccCode,
08.        round( SUM( ISNULL(GLDT.DrAmnt, 0)),2) as DrAmntCurr,
09.        round( SUM( ISNULL(GLDT.CrAmnt, 0)),2) as CrAmntCurr,
10.        0 Beginn
11. 
12.    FROM EMAcc LEFT OUTER JOIN GLDT ON ((GLDT.AccID = EMAcc.AccID)
13.            AND (GLDT.DocuStatus = 'N')
14.            AND (GLDT.DocuType IN (501))
15.            AND (CONVERT(VARCHAR(8),GLDT.DocuDate,112) between '20140801' AND '20140801')
16.            AND ((GLDT.BrchID = 1) ))
17.        LEFT OUTER JOIN EMBrch ON (GLDT.BrchID = EMBrch.BrchID)
18.    WHERE   EMAcc.AccControlFlag = '1'
19.           
20.    AND (  ( emacc.acccode between '111216.000' and '111220.000' )  ) 
21.           
22.    AND ( GLDT.AccID is not null ) 
23.    GROUP BY
24.        EMAcc.AccCode
25. 
26.    UNION
27. 
28.    SELECT
29.        EMAcc.AccCode,
30.        0 DrAmnt,
31.        0 CrAmnt,
32.        SUM(ISNULL(round(DrAmnt,2),0.00) - ISNULL(round(CrAmnt,2),0.00))as Beginn
33. 
34.    FROM EMAcc LEFT OUTER JOIN GLDT ON ((GLDT.AccID = EMAcc.AccID)
35.            AND (GLDT.DocuStatus = 'N')
36.            AND ( ((GLDT.DocuType = 503) AND (CONVERT(VARCHAR(8),GLDT.DocuDate,112) = '20131231')))
37.            AND ((GLDT.BrchID = 1) OR (1 = 0)))
38.        LEFT OUTER JOIN EMBrch ON (GLDT.BrchID = EMBrch.BrchID)
39.    WHERE   EMAcc.AccControlFlag = '1'
40.           
41.    AND (  ( emacc.acccode between '11100.010' and '111501.000' )  )
42.           
43.    AND ( GLDT.AccID is not null ) 
44.    GROUP BY
45.        EMACC.AccCode
46. 
47.    ) as x
48.    group by AccCode
49. ) as x
50.where (DrAmntCurr <> '0.00' or CrAmntCurr <> '0.00' or Beginn <> '0.00')
51./*where Beginn <> '0.00'*/
52.group by AccCode
53. 
54. 
55.order by LEFT(AccCode,6)



ประวัติการแก้ไข
2015-02-21 09:50:58
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-02-20 17:33:42 By : AnnYZaa
 

 

No. 19



โพสกระทู้ ( 9,590 )
บทความ ( 2 )



สถานะออฟไลน์


ได้มา แล้ว ให้ต่อครับ จะได้บุญกุศลต่อๆกันไป
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-02-20 17:40:21 By : Chaidhanan
 

 

No. 20

Guest


@ AnnYZaa ผมดู SQL Query พวกนี้จนชินตา แค่ผมเหลือบตา ผมก็มองทะลุปรุโปร่ง
ประมาณว่า ผมจับจู๋ฉี่

ไม่ว่าจะเป็น 105 หรือ 501 หรือ 510, etc [color=green]ผมจับสำเนียงได้หมดครับ
ผมรู้แม้กระทั่งว่าคุณกำลังคิดจะทำอะไร?[/color]


ก่อนแก้ไขและหลังแก้ไข ผมว่าคุณพูดไม่ตรงกัน ผมเตือนคุณด้วยความหวังดีอีกนิดหนึ่ง
จาก #NO 18 บรรทัดที่ 50 คุณมั่นใจนะว่ามันถูกต้อง
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-02-20 19:02:59 By : หน้าฮี
 

 

No. 21



โพสกระทู้ ( 129 )
บทความ ( 0 )



สถานะออฟไลน์


@หน้าฮี

คุณจะคิดอะไรก็เรื่องของคุณเถอะค่ะ

และที่แก้ไขไป ไม่ได้มั่นใจว่าทำถูกทุกอย่าง แค่ทำแล้วให้ผลรันออกมาได้ตามที่ต้องการก็โอเคแล้วค่ะ เพราะไม่ได้เป็นโปรแกรมเมอร์ หรือโปรแกรมมเมอร์มืออาชีพ

ขอบคุณค่ะ


ประวัติการแก้ไข
2015-02-21 09:50:34
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-02-21 09:21:49 By : AnnYZaa
 

 

No. 22

Guest


@ AnnYZaa

ทั้งชีวิตของผมเจอะเจอคนมานับไม่ถ้วน และทุกฯคนก็จะ พูด/คิด เหมือนฯกัน + คุณอีกคนหนึ่ง
คุณคือหนึ่งในนั้น ครับ

Good Luck.
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-02-21 21:02:29 By : หน้าฮี
 

 

No. 23

Guest


ความหมาย ของคำว่า "คุณคือหนึ่งในนั้น"
ไม่ได้มีความหมายมากไปกว่าคำว่า "คุณก็ไม่แตกต่างจากคนอื่น"

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-02-21 21:06:26 By : หน้าฮี
 

 

No. 24

Guest


ผมเห็นคุณเงียบไป จะด้วยสาเหตุใดฯ ก็ตาม

ผมกำลังตามหาความหมายของคำว่า Reversing Entries
นิยามศัพท์ทางบัญชี หมายความว่า การกลับรายการทางการบัญชี
...
...
...
นิยามศัพท์ทางคอมพิวเตอร์ ผมไม่รู้ความหมายที่แท้จริงของมัน
(คนที่รู้ส่วนใหญ่ก็เจ้าของโปรแกรมทั้งหลายแหล่นั่นแหละ)


ผมพยายามตามหามัน ... ... ... ช่องว่างระหว่าง บัญชีและคอมพิวเตอร์
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-02-23 18:48:59 By : หน้าฮี
 

 

No. 25

Guest


CREATE TABLE [dbo].[tablexx](
[type] [varchar](10) NULL,
[id] [int] NULL,
[list] [varchar](10) NULL,
[bfdb] [int] NULL,
[bfcr] [int] NULL,
[baldb] [int] NULL,
[balcr] [int] NULL,
[accdb] [int] NULL,
[acccr] [int] NULL
) ON [PRIMARY]
GO


insert into [dbo].[tablexx]
values (101,111000,'aaa',0,0,1000,500,500,0),
(105,111000,'aaa',5000,0,0,0,5000,0),
(101,111200,'bbbb',0,0,500,0,500,0),
(105,111200,'bbbb',10000,0,0,0,1000,0),
(101,222100,'ccc',0,0,800,500,0,300),
(105,222100,'ccc',0,1000,0,0,0,1000)


select * from tablexx

select typea,
id, list,
sum(bfdb),sum(bfcr),sum(baldb),sum(balcr),sum(accdb),sum(acccr)
from (
select LAST_VALUE(a.type) over ( partition by id order by id ) as typeA,
id, list,
bfdb,bfcr,baldb,balcr,accdb,acccr
from tablexx a
) aa
group by typea,id,list
order by 2,3
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-11-22 15:08:44 By : WWWWIN
 

 

No. 26

Guest


ตามนนี้จ้า 555


Code (SQL)
01.CREATE TABLE [dbo].[tablexx](
02.    [type] [varchar](10) NULL,
03.    [id] [int] NULL,
04.    [list] [varchar](10) NULL,
05.    [bfdb] [int] NULL,
06.    [bfcr] [int] NULL,
07.    [baldb] [int] NULL,
08.    [balcr] [int] NULL,
09.    [accdb] [int] NULL,
10.    [acccr] [int] NULL
11.) ON [PRIMARY]
12.GO
13. 
14. 
15.insert into [dbo].[tablexx]
16.values (101,111000,'aaa',0,0,1000,500,500,0),
17.       (105,111000,'aaa',5000,0,0,0,5000,0),
18.       (101,111200,'bbbb',0,0,500,0,500,0),
19.       (105,111200,'bbbb',10000,0,0,0,1000,0),
20.       (101,222100,'ccc',0,0,800,500,0,300),
21.       (105,222100,'ccc',0,1000,0,0,0,1000)
22. 
23. 
24.select * from tablexx
25. 
26.select typea,
27.         id, list,
28.sum(bfdb),sum(bfcr),sum(baldb),sum(balcr),sum(accdb),sum(acccr)
29.from (
30.    select LAST_VALUE(a.type) over ( partition by id order by id )  as typeA,
31.         id, list,
32.    bfdb,bfcr,baldb,balcr,accdb,acccr
33.    from tablexx a
34.    ) aa
35.group by typea,id,list
36.order by 2,3

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-11-22 15:10:31 By : WWWWIN
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : sum ตัวเลขจากการ union จาก 2 บรรทัดให้เหลือ 1 บรรทัด (อธิบายไม่ถูก มีภาพประกอบ)
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)





ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2025 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่