สอบถามQueryให้แสดงวันที่ทุกวันของเดือน



0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้

05 มิ.ย. 61 , 13:45:16
อ่าน 761 ครั้ง

Earth

สอบถามQuery เพื่อให้ได้ข้อมูลที่แสดงวันที่(ทุกวัน)ของ1เดือน  ผลลัพธ์ตารางที่ได้คือ



จากQueryด้านบนต้องการนำมาเพิ่มวันที่ที่ไม่มีในข้อมูลนี้ให้ครบ1เดือนตามรูปนี้ค่ะ
จากรูปวันที่ไม่มีข้อมูล Takein Take outจะแสดงวันที่ด้วย เป็นค่าว่าง  (ค่าที่เพิ่มในกรอบแดง)
ส่วนค่า Balance แถวแรกมาจากยอดยกมา
ค่า Balance ถัดมามาจากค่าBalance ก่อนหน้า + Takein(วันปัจจุบัน) - TakeOut(วันปัจจุบัน)ค่ะ

« แก้ไขครั้งสุดท้าย: 05 มิ.ย. 61 , 14:28:39 โดย Earth »

 

05 มิ.ย. 61 , 14:31:55
ตอบกลับ #1

ปิ่นณรงค์

: สอบถามQueryให้แสดงวันที่ทุกวันของเดือน
« ตอบกลับ #1 เมื่อ: 05 มิ.ย. 61 , 14:31:55 »
ทำคิวรี่แรกก่อนแบบนี้ครับ

โค๊ด: [Select]
SELECT format(StockDate,"DD-MMM"), Takein, TakeOut, Balance
FROM StockBefore
UNION SELECT format(StockDate,"DD-MMM"), Takein, TakeOut,  '' as Balance
FROM StockCard;
:love: :grin:
 
โพสต์นี้ได้รับคำขอบคุณจาก: Earth

05 มิ.ย. 61 , 14:43:22
ตอบกลับ #2

Earth

: สอบถามQueryให้แสดงวันที่ทุกวันของเดือน
« ตอบกลับ #2 เมื่อ: 05 มิ.ย. 61 , 14:43:22 »
ขอบคุณค้า อันแรกทำได้แล้วค่ะ เหลือแสดงวันที่ค่ะ
ทำคิวรี่แรกก่อนแบบนี้ครับ

โค๊ด: [Select]
SELECT format(StockDate,"DD-MMM"), Takein, TakeOut, Balance
FROM StockBefore
UNION SELECT format(StockDate,"DD-MMM"), Takein, TakeOut,  '' as Balance
FROM StockCard;

 

05 มิ.ย. 61 , 23:44:56
ตอบกลับ #3

OddyWriter

: สอบถามQueryให้แสดงวันที่ทุกวันของเดือน
« ตอบกลับ #3 เมื่อ: 05 มิ.ย. 61 , 23:44:56 »
ทำให้เห็นเป็นแนวทางเฉยๆ นะครับ

อาจต้องเขียน VBA หรือใช้คำสั่ง IIF ใน Query เพื่อปรับแต่งการแสดงผล

พอดีจะหายไป 3 วันน่ะครับ เลยอยู่ดูต่อไม่ได้
กินร้อน ช้อนตัวเอง จานใครจานมัน ออกนอกบ้านใส่หน้ากากอนามัยหรือหน้ากากผ้า
 
โพสต์นี้ได้รับคำขอบคุณจาก: Earth

06 มิ.ย. 61 , 09:19:58
ตอบกลับ #4

Earth

: สอบถามQueryให้แสดงวันที่ทุกวันของเดือน
« ตอบกลับ #4 เมื่อ: 06 มิ.ย. 61 , 09:19:58 »
ขอบคุณมากค่ะ

 

08 มิ.ย. 61 , 17:12:11
ตอบกลับ #5

ปิ่นณรงค์

: สอบถามQueryให้แสดงวันที่ทุกวันของเดือน
« ตอบกลับ #5 เมื่อ: 08 มิ.ย. 61 , 17:12:11 »
ขอบคุณค้า อันแรกทำได้แล้วค่ะ เหลือแสดงวันที่ค่ะ
ทำคิวรี่แรกก่อนแบบนี้ครับ

โค๊ด: [Select]
SELECT format(StockDate,"DD-MMM"), Takein, TakeOut, Balance
FROM StockBefore
UNION SELECT format(StockDate,"DD-MMM"), Takein, TakeOut,  '' as Balance
FROM StockCard;

อันตอนต่อไป กำหนด วันที่ โดยรันวันที่ลงมา ผมใช้ การสร้างตาราง ขึ่นมามี 365 วัน ตัวอย่างคำสั่ง สร้างตารางที่จะเก็บไว้ชื่อ TempDate365 ตั้งชื่อ Field ว่า Stockdate
บน Module
โค๊ด: [Select]
Option Compare Database
Public Sub MakeDate365(Optional ByVal pYear As Integer, _
        Optional ByVal pTable As String = "TempDate365", _
        Optional ByVal pField As String = "Stockdate")
    Dim db As DAO.Database
    Dim dte As Date
    Dim dteLast As Date
    Dim intYear As Integer
    Dim rs As DAO.Recordset
    Dim strMsg As String

On Error GoTo ErrorHandler

    intYear = IIf(pYear = 0, Year(Date), pYear)
    dte = DateSerial(intYear, 1, 1)
    dteLast = DateSerial(intYear, 12, 31)

    Set db = CurrentDb
    Set rs = db.OpenRecordset(pTable, dbOpenTable, dbAppendOnly)

    Do While dte <= dteLast
        rs.AddNew
        rs.Fields(pField).Value = dte
        rs.Update
        dte = dte + 1
    Loop
    rs.Close

ExitHere:
    On Error GoTo 0
    Set rs = Nothing
    Set db = Nothing
    Exit Sub

ErrorHandler:
    strMsg = "Error " & Err.Number & " (" & Err.Description _
        & ") in MakeDate365"
    MsgBox strMsg
    GoTo ExitHere
End Sub



สร้างคิวรี่ใหม่ ชื่อ  StockQuery2
กำหนดค่าดังนี้
โค๊ด: [Select]
SELECT TempDate365.StockDate, IIf(IsNull([Takein]),0,[Takein]) AS Take_in, IIf(IsNull([Takeout]),0,[Takeout]) AS Take_out, (select  [BeforeQty] from [StockBeforeQuery] ) AS Before_Qty
FROM StockQuery RIGHT JOIN TempDate365 ON StockQuery.StockDate = TempDate365.StockDate
WHERE (((TempDate365.StockDate) Between [forms]![Main]![StockBefore] And [forms]![Main]![EndDate]));

ที่คิวรี่ตัวต่อไป ชื่อ StockQuery3
โค๊ด: [Select]
SELECT T1.[Before_Qty]+(select nz(sum(T2.Take_in),0) from StockQuery2 as T2 where  T2.StockDate <= T1.StockDate)-
(select nz(sum(T2.Take_out),0) from StockQuery2 as T2 where T2.StockDate <= T1.StockDate) AS TotalQty, *
FROM StockQuery2 AS T1
ORDER BY T1.StockDate;

ผลลัพท์ที่ได้


ตัวอย่างด้านล่าง
« แก้ไขครั้งสุดท้าย: 08 มิ.ย. 61 , 17:22:04 โดย ปิ่นณรงค์ »
:love: :grin:
 
โพสต์นี้ได้รับคำขอบคุณจาก: Earth


บอร์ดเรียนรู้ Access สำหรับคนไทย