Hỏi Đáp SQL------------ Không có câu hỏi nào là sơ đẳng --------

Đặt câu hỏi và trả lời cho PL/SQL

Đây là nơi các bạn có thể đặt tất cả các câu hỏi liên quan đến  PL/SQL. Không có câu hỏi nào là quá dễ, tất cả đều được hoan nghênh.


Để dễ dàng hơn cho người trả lời, mong các bạn trình bày chi tiết câu hỏi. Xin đừng cho rằng người trả lời biết hệ thống của bạn; không, họ không biết gì cả; bạn cần trình bày chi tiết.

Với những câu hỏi liên quan đến các đoạn mã bạn gởi lên, xin gởi đoạn mã trong thẻ [code] và [/code].

Ví dụ :
[code]
select * from bang1
[/code]

Với những câu hỏi liên quan đến dữ liệu và các đối tượng, xin các bạn gởi :

- cấu trúc các đối tượng liên quan đến câu hỏi
- dữ liệu mẫu của các đối tượng
- kết quả mà bạn muốn
- trình bày logic để lấy ra kết quả.

Ví Dụ:
Tôi có bảng có cấu trúc và dữ liệu mẫu như sau

[code]
declare @temp table
(
 Id int identity,
 MaKH int,
 NgayMua date,
 SoTien money
);
insert into @temp values(1,'11/11/2015',20);
insert into @temp values(2,'11/12/2015',30);
insert into @temp values(2,'11/13/2015',10);
insert into @temp values(1,'11/14/2015',10);
insert into @temp values(2,'11/15/2015',60);
[/code]

Tôi muốn có câu lệnh truy xuất để cho ra kết quả như sau

Id          MaKH        NgayMua    SoTien                TongSoTien
----------- ----------- ---------- --------------------- ---------------------
1           1           2015-11-11 20.00                 20.00
4           1           2015-11-14 10.00                 30.00
2           2           2015-11-12 30.00                 30.00
3           2           2015-11-13 10.00                 40.00
5           2           2015-11-15 60.00                 100.00

Logic:
Ứng với mỗi MaKhachHang
TongSoTien = SoTien + tất cả SoTien trước đó, dựa vào thứ tự của NgayMua

Ví dụ:
Dòng đầu tiên (id=1), TongSoTien bằng 20 + 0 = 20 vì không có dòng nào cùng MaKhachHang đứng trước dòng này.
Dòng thứ 2 (id=4), TongSoTien bằng 10 + 20 = 30 vì các dòng đứng trước nó có SoTien là 20.
----
Dòng thứ 3 (id=5), TongSoTien bằng 60 + 10 + 30 = 100 vì các dòng đứng trước nó có SoTien là 10 và 30.

6 nhận xét:

  1. giải giúp em câu này với ạ

    hãy lấy ra 10 bài viết mới hơn bài viết đang xem

    Trả lờiXóa
  2. Gia su bang cua ban la A, co truong ID la khoa chinh va truong NGAY quy dinh thoi gian, voi bien @id xac dinh bai viet dang xem. Cau lenh nhu sau

    [code]
    select ca.* from A a1
    cross apply
    (
    select top 10 * from A a2 where a2.NGAY > a1.NGAY order by a2.NGAY desc
    )ca
    where a1.ID=@id
    [/code]

    Trả lờiXóa
  3. Mn ơi giúp mình với:
    Mình có 1 bảng dữ liệu khách hàng gồm mã khách hàng và ngày mua hàng. 1 khách hàng có thể mua nhiều lần. Mình muốn xác định ngày mua hàng gần nhất liền kề ngày mua hàng cụ thể. Điều kiện ngày mua gần nhất ko tính lần mua Hoa Hồng (mã SP: 'HH')
    Ví dụ: Khách hàng A mua hàng ngày 02/01/2018. Và ngày mua liền kề gần nhất là 04/06/2017.

    Trả lờiXóa
  4. Mn ơi giúp mình với:
    Mình có 1 bảng dữ liệu khách hàng gồm mã khách hàng và ngày mua hàng. 1 khách hàng có thể mua nhiều lần. Mình muốn xác định ngày mua hàng gần nhất liền kề ngày mua hàng cụ thể. Điều kiện ngày mua gần nhất ko tính lần mua Hoa Hồng (mã SP: 'HH')
    Ví dụ: Khách hàng A mua hàng ngày 02/01/2018. Và ngày mua liền kề gần nhất là 04/06/2017.

    Trả lờiXóa
  5. Gia thu ban co bang A (MaKhachHang varchar(20), NgayMuaHang date)
    Tim ngay lien ke cho khach hang : @mkh='abc' va ngay cu the ban muon : tim @ngayCuThe='1/1/2010'

    Cau lenh nhu sau

    select top 1 NgayMuaHang from A where MaKhachHang=@mkh and NgayMuaHang<@ngayCuThe order by NgayMuaHang desc

    Trả lờiXóa
  6. mn giúp mình câu này với: tạo trigger thỏa điề kiện khi xóa một sinh viên sẽ xóa các thông tin liên quan ở các bảng khác

    Trả lờiXóa