Truy vấn trong SQL?

Liên hệ QC
Nhưng phần mềm mới chỉ quản lý nhật ký xuất, nhập hàng ngày và tồn theo tại thời điểm hiện tại, tồn kho đầu kỳ. Không thể lấy được tồn kho theo từng thời điểm.

Ví dụ hiện đang là thời điểm ngày 5/8 trong hệ thống csdl chỉ quản lý tồn kho đầu kỳ sau kiểm kê hết ngày 31/7 và tồn ở thời điểm hiện tại là ở ngày 5/8 là số lượng cụ thể bao nhiêu.

Nhưng khi đứng ở ngày 5/8 nếu con muốn biết dữ liệu tồn kho từ 1/7 đến ngày 25/7 của mã hàng A là bao nhiêu thì hệ thống không có.

Nếu CSDL đã có kết chuyển tồn cuối kỳ (hoặc tồn đầu) theo tháng và tồn tại thời điểm rồi thì chắc chắn là đã có giải thuật tính tồn kho theo khoảng thời gian cần truy vấn rồi. Chắc là bạn chưa biết nó nằm trong cái stored proc. nào để gọi ra thôi.
 
Con cảm ơn Bác VetMini nhiều ạ.
Thực ra CSDL, khi cài đặt phần mềm đã có tại Server rồi Bác ạ. Nên khâu thiết kế là không cần nữa Bác ạ.
Nhưng phần mềm mới chỉ quản lý nhật ký xuất, nhập hàng ngày và tồn theo tại thời điểm hiện tại, tồn kho đầu kỳ. Không thể lấy được tồn kho theo từng thời điểm.

Ví dụ hiện đang là thời điểm ngày 5/8 trong hệ thống csdl chỉ quản lý tồn kho đầu kỳ sau kiểm kê hết ngày 31/7 và tồn ở thời điểm hiện tại là ở ngày 5/8 là số lượng cụ thể bao nhiêu.

Nhưng khi đứng ở ngày 5/8 nếu con muốn biết dữ liệu tồn kho từ 1/7 đến ngày 25/7 của mã hàng A là bao nhiêu thì hệ thống không có.
Do đó con muốn sử dụng câu truy vấn trong sql để làm việc này.
Về dữ liệu cụ thể, con sẽ cung cấp sau ạ, vì hiện con cũng đang chưa hiểu dữ liệu ở các bảng trong sql liên quan như thêa nào để gửi lên ạ.
OT cảm ơn Bác VetMini và Anh ongke0711 đã quan tâm và giúp đỡ ạ.
Tôi khuyên bạn nên tìm tài liệu của người thiết kế hệ thống QL hàng mà đọc.
Một phần mềm cài đặt luôn luôn có hồ sơ và tài liệu về thiết kế (design documents, user's guide,...). Nếu không có thì cơ quan bạn mướn nhằm thằng cà chớn cài đặt rồi.
Hệ thống tôi thiết kế ngoài những tài liệu kể trên còn cả tài liệu thẩm định về hiệu quả sau 3, 6, và 12 tháng.
Hầu hết những stored procedures liên quan đến cập nhật dữ liệu cũng đều có hồ sơ ghi rõ chức năng.

Chỉ riêng cái câu tôi tô đỏ ở trên cũng đủ cho thấy bạn không hiểu nhiệm vụ của QL hàng tồn kho rồi.
Hàng tồn kho là con số cho biết tình trạng của hàng ở một thời điểm (ngay tại ngày), không thể là con số ở một khoảng thời gian (từ ngày đến ngày). Trong khoảng thời gian thì bạn chỉ có thể lấy những con số thống kê, ví dụ từ ngày xxx đến ngày yyy thì trung bình tồn kho là 123, cao nhất là 456, thấp nhất là 0, có 3 lần thiếu hàng, vân vân...
Và cả nhu cầu lẫn khả năng cung cấp con số thống kê đã được thẩm định từ lúc thiết kế.
 
Chỉ riêng cái câu tôi tô đỏ ở trên cũng đủ cho thấy bạn không hiểu nhiệm vụ của QL hàng tồn kho rồi.
Hàng tồn kho là con số cho biết tình trạng của hàng ở một thời điểm (ngay tại ngày), không thể là con số ở một khoảng thời gian (từ ngày đến ngày). Trong khoảng thời gian thì bạn chỉ có thể lấy những con số thống kê, ví dụ từ ngày xxx đến ngày yyy thì trung bình tồn kho là 123, cao nhất là 456, thấp nhất là 0, có 3 lần thiếu hàng, vân vân...
Và cả nhu cầu lẫn khả năng cung cấp con số thống kê đã được thẩm định từ lúc thiết kế.

Chắc là ý em OT muốn lấy báo cáo Nhập - Xuất - Tồn trong một khoảng thời gian nhưng không diễn giải đúng đó anh VetMini. Tồn kho ở từng thời điểm nhâp xuất.
 
Tôi khuyên bạn nên tìm tài liệu của người thiết kế hệ thống QL hàng mà đọc.
Một phần mềm cài đặt luôn luôn có hồ sơ và tài liệu về thiết kế (design documents, user's guide,...). Nếu không có thì cơ quan bạn mướn nhằm thằng cà chớn cài đặt rồi.
Hệ thống tôi thiết kế ngoài những tài liệu kể trên còn cả tài liệu thẩm định về hiệu quả sau 3, 6, và 12 tháng.
Hầu hết những stored procedures liên quan đến cập nhật dữ liệu cũng đều có hồ sơ ghi rõ chức năng.

Chỉ riêng cái câu tôi tô đỏ ở trên cũng đủ cho thấy bạn không hiểu nhiệm vụ của QL hàng tồn kho rồi.
Hàng tồn kho là con số cho biết tình trạng của hàng ở một thời điểm (ngay tại ngày), không thể là con số ở một khoảng thời gian (từ ngày đến ngày). Trong khoảng thời gian thì bạn chỉ có thể lấy những con số thống kê, ví dụ từ ngày xxx đến ngày yyy thì trung bình tồn kho là 123, cao nhất là 456, thấp nhất là 0, có 3 lần thiếu hàng, vân vân...
Và cả nhu cầu lẫn khả năng cung cấp con số thống kê đã được thẩm định từ lúc thiết kế.
Xin chào Bác VetMini,
Đúng rồi ạ, hiện con đang chưa hiểu được về nhiệm vụ quản lý hàng tồn kho.
Còn về tài liệu cho phần mềm của công ty con gần như không có thông tin gì ạ. Trong giao diện phần mềm thì không thể lấy dữ liệu xuất nhập tồn theo từng thời điểm trong quá khứ được, trong khi đó kế toán thi thoảng vẫn cần báo báo để phụ vụ thanh tra thuê ạ.

Chắc là ý em OT muốn lấy báo cáo Nhập - Xuất - Tồn trong một khoảng thời gian nhưng không diễn giải đúng đó anh VetMini. Tồn kho ở từng thời điểm nhâp xuất.
Xin chào Anh ongke0711,
Đúng đúng rồi Anh ạ, OT cần báo cáo này. Nhưng do phần mềm không có chức năng tạo báo cáo xuất nhập tồn trong khoảng thời điểm bất kỳ trong quá khứ nên OT mới cần truy vấn trong SQL ạ.

Không biết câu lệnh truy vấn dựa vào nhật,ký xuất nhập ở các thời điểm liệu có tính ra được tồn kho được hay không ạ?
Nhưng trước hết OT cần tìm hiểu thêm về các bảng dữ liệu trong CSLD có những gì đã ạ. Rồi nhờ Bác/Anh và mọi người xem giúp ạ.
Híc,anh IT cho động vào máy chủ mà OT thấy ghê quá ạ,nghịch linh sợ nó hư dữ liệu thì mệt lắm ạ.
Nên OT chỉ dám sử dụng câu lệnh Select trong SQL thôi ạ.

Cảm ơn Bác và Anh đã góp ý.
 
Pm mua hay đặt hàng viết riêng vậy bạn OverTime ? Của VN hay nước ngoài?
Nếu của VN thì hầu như đặt hàng họ sửa chữa, thêm bớt được. Cứ liên hệ họ và dắt Bác theo. Nhớ phải có thời gian, điều kiện bảo hành rõ ràng nhen, không thì lại tốn Bác đấy
Còn không được thì dắt Bác qua cho Ông Kẹ. Mấy vụ database này trên GPE nó sợ bạn Ông Kẹ lắm đấy :)
 
Có những ngôn từ hơi nóng về chính trị một chút.
Người "anh hùng" có thể ỷ mình bất khả xâm phạm nhưng kẻ "trượng phu" phải biết suy nghĩ cho hoàn cảnh của người khác.
 
Còn không được thì dắt Bác qua cho Ông Kẹ. Mấy vụ database này trên GPE nó sợ bạn Ông Kẹ lắm đấy :)

Bác CuAnh nói quá rồi... CSDL tôi còn chưa sạch nước cản nữa mà. Chẳng qua là có xem qua vài cái CSDL về bán hàng, nhân sự nên góp vài ý kiến thôi. :)
 
Tính tồn kho thời điểm đã qua thì không khó lắm.
Nếu là SQL Server (chính bản, không phải Express) thì người thiết kế thường có cái view cho biết tồn kho ở từng đầu kỳ. Ví dụ tôi ở tài khoá 2019 thì tôi sẽ có 12 cái views của 12 tháng 2018, và 8 cái views cho tháng 1-8 2019.
Việc tính tồn kho từng thời điểm chỉ là truy vấn cái view đúng đầu kỳ và cộng/trừ đi những phát sinh cho đến thời điểm cần tính.
Nếu không có những cái views này thì:
1. Bảo người thiết kế viết sp để thiết lập chúng, HOẶC
2. Chịu khó mò cái tồn kho gần nhất. Và làm tương tự như trên

Tính tồn kho dự toán tương lai thì mới khó. Vì phải tính tình trạng từng hợp đồng đã ký, hoặc dự định ký nhưng chưa xuất kho.
(có một số hệ thống xuất kho rồi vẫn tính là hàng còn trong tay, bên kia nhận rồi mới tính là hàng không còn của mình)
 
Không biết câu lệnh truy vấn dựa vào nhật,ký xuất nhập ở các thời điểm liệu có tính ra được tồn kho được hay không ạ?
Nhưng trước hết OT cần tìm hiểu thêm về các bảng dữ liệu trong CSLD có những gì đã ạ. Rồi nhờ Bác/Anh và mọi người xem giúp ạ.
Híc,anh IT cho động vào máy chủ mà OT thấy ghê quá ạ,nghịch linh sợ nó hư dữ liệu thì mệt lắm ạ.
Nên OT chỉ dám sử dụng câu lệnh Select trong SQL thôi ạ.

Có nhật ký Xuất - Nhập + Tồn kho đầu kỳ (hoặc cuối kỳ tuỳ theo CSDL của em) là truy xuất ra được tồn kho luỹ tiến theo từng nghiệp vụ Xuất Nhập. Đừng kêu tính đơn giá bình quân gia quyền hay báo cáo NXT theo FIFO, LIFO là được...hehe.. :)
 
Có nhật ký Xuất - Nhập + Tồn kho đầu kỳ (hoặc cuối kỳ tuỳ theo CSDL của em) là truy xuất ra được tồn kho luỹ tiến theo từng nghiệp vụ Xuất Nhập. Đừng kêu tính đơn giá bình quân gia quyền hay báo cáo NXT theo FIFO, LIFO là được...hehe.. :)

Cảm ơn Bác VetMini , Anh ongke0711 đã luôn quan tâm & giúp đỡ OT ạ.
OT cũng chưa nghiên cứu được dữ liệu trong CSDL ở các bảng liên quan với nhau như thế nào nên chưa đưa dữ liệu lên được.
Bác và Anh có tài liệu hoặc biết link nào tiếng Việt về CSDL/ liên quan cụ thể đến quản lý kho không ạ gửi cho OT thử "nghịch" với được không ạ.
Híc anh IT cấm không cho OT sử dụng câu lệnh nào ngoài câu lệnh SELECT trong DB thật ạ, còn muốn làm gì thì anh ý cũng tạo ra một DB bản sao cho nghịch mà OT cũng chưa biết nên bắt đầu từ đâu ạ.
Khổ có trường, có nơi thực hành nhưng không có Thầy ạ T_T
 
Cảm ơn Bác VetMini , Anh ongke0711 đã luôn quan tâm & giúp đỡ OT ạ.
OT cũng chưa nghiên cứu được dữ liệu trong CSDL ở các bảng liên quan với nhau như thế nào nên chưa đưa dữ liệu lên được.
Bác và Anh có tài liệu hoặc biết link nào tiếng Việt về CSDL/ liên quan cụ thể đến quản lý kho không ạ gửi cho OT thử "nghịch" với được không ạ.
Híc anh IT cấm không cho OT sử dụng câu lệnh nào ngoài câu lệnh SELECT trong DB thật ạ, còn muốn làm gì thì anh ý cũng tạo ra một DB bản sao cho nghịch mà OT cũng chưa biết nên bắt đầu từ đâu ạ.
Khổ có trường, có nơi thực hành nhưng không có Thầy ạ T_T
Bắt đầu từ đâu thì không biết máy ở nhà của bạn đã cài đặt SQL server chưa? Bạn nói anh IT đó sao lưu cho bạn một cái DB riêng, sau đó chạy riêng trên máy bạn và test, cái này mình hay làm cho công ty mình, do công ty mình chỉ cho phép truy cập vào database qua các máy trên cty, nên mình thường hay sao lưu 1 bản rồi về nhà chạy để test.
 
Xin chào các bạn.
Nhờ các bạn giúp đỡ OT trường hợp sau với ạ.

Trong màn hình giao diện phần mềm quản lý kho sử dụng câu lệnh:
Mã:
select cast(0 as decimal(29,3))  as TONKHO 
...

Cột TONKHO có số liệu tồn kho.
Nhưng trong màn hình SQL.Dabase OT chạy câu lệnh đó vào thì kết quả là 0.

Xin hỏi phải sửa trong SQL.Dabase như thế nào để có dữ liệu giống như giao diện phần mềm ạ
 
Trong màn hình giao diện phần mềm quản lý kho sử dụng câu lệnh:
Mã:
select cast(0 as decimal(29,3))  as TONKHO
...

Cột TONKHO có số liệu tồn kho.
Nhưng trong màn hình SQL.Dabase OT chạy câu lệnh đó vào thì kết quả là 0.

Xin hỏi phải sửa trong SQL.Dabase như thế nào để có dữ liệu giống như giao diện phần mềm ạ

Thay số 0 thành tên field tưng ứng cần chuyển đổi.
Cast (Tên field As Decimal.....)
 
Xin chào các bạn.
Nhờ các bạn giúp đỡ OT trường hợp sau với ạ.

Trong màn hình giao diện phần mềm quản lý kho sử dụng câu lệnh:
Mã:
select cast(0 as decimal(29,3))  as TONKHO
...

Cột TONKHO có số liệu tồn kho.
Nhưng trong màn hình SQL.Dabase OT chạy câu lệnh đó vào thì kết quả là 0.

Xin hỏi phải sửa trong SQL.Dabase như thế nào để có dữ liệu giống như giao diện phần mềm ạ
Cách tốt nhất hỏi nhà sx phần mềm (hoặc đọc được code của họ), vì ai biết sau khi nhập chuỗi Sql đó vào trong chương trình xử lý gì tiếp (chẳng hạn thay số 0 như suy đoan của ongke trên , hoặc là khác thì sao)
 
Cảm ơn ongke0711 đã giúp đỡ
Anh có thể chỉ cho OT dựa vào đâu để biết Tên field này không ạ?

Đúng như bạn ppc0312 đã đề cập, thường câu lệnh này chỉ là trung gian trong một truy vấn gì đó như Union query, stored proc... chứ câu lệnh này không phải để em thay tên field. Anh gợi ý cách thay tên field để em hiểu về cú pháp và để truy vấn ra số tồn kho.
Muốn hiểu hơn thì phải có toàn bộ đoạn code trên mới phán đoán được.
 
Nhìn vô choáng luôn. Union query gộp nhiều Recordset lại với nhau, những recordset không có các cột như ZAIK...sẽ phải tạo thêm cột đó với gía trị mặc định =0 để các phép tính toán liên quan đến field này không có giá trị null.
Còn nhìn vô mấy câu lệnh T-SQL này với tên field đặc thù như vậy thì làm sao người ngoài cuộc hiểu được nội dung field đó là gì, câu lệnh đó chạy kết quả ra cái gì mà giúp bạn được.
Tính tồn kho thì ứng với mỗi kiểu thiết kế CSDL khác nhau sẽ có những cách phối hợp xử lý các bảng biểu khác nhau để truy vấn ra tồn kho. Nói chung chung thì khó xử lý lắm nhé.


Xin chào ongke0711,
Cảm ơn Anh đã giúp đỡ, OT đã xử lý được vấn đề bằng cách sử dụng vba để tính toán sau khi lấy được các dữ liệu liên quan.
--------
Một vấn đề khác nhờ Anh và mọi người xem giúp ạ, trong câu lệnh sau:
Mã:
....
strSQL = “SELECT * FROM tblODER WHERE MAHANG LIKE ’KH%'”
rs.Open strSQL, conn
Dim ws As Worksheet
Set ws = Application.Sheets.Add
ws.Range(“A1”).CopyFromRecordset rs
Msgbox rs.Fields.Count
....
rs.Fields.Count sẽ trả về số cột của rs
Vậy làm thế nào để kiểm tra được số dòng trả về của rs (không dùng phương pháp kiểm tra trên bảng tính excel sau khi ghi xuống bảng tính)
 
Lần chỉnh sửa cuối:
Xin chào ongke0711,
Cảm ơn Anh đã giúp đỡ, OT đã xử lý được vấn đề bằng cách sử dụng vba để tính toán sau khi lấy được các dữ liệu liên quan.
--------
Một vấn đề khác nhờ Anh và mọi người xem giúp ạ, trong câu lệnh sau:
Mã:
....
strSQL = “SELECT * FROM tblODER WHERE MAHANG LIKE ’KH%'”
rs.Open strSQL, conn
Dim ws As Worksheet
Set ws = Application.Sheets.Add
ws.Range(“A1”).CopyFromRecordset rs
Msgbox rs.Fields.Count
....
rs.Fields.Count sẽ trả về số cột của rs
Vậy làm thế nào để kiểm tra được số dòng trả về của rs (không dùng phương pháp kiểm tra trên bảng tính excel sau khi ghi xuống bảng tính)
sử dụng
Recordset.RecordCount
 
sử dụng rowcount và phần chay truy vấn với tham số

rs.Open strSQL, conn,3,1

Mình k nhớ có chính xác k.
 
Web KT
Back
Top Bottom