Đây là nơi các bạn có thể đặt tất cả các câu hỏi liên quan dến- T-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.
Hỏi Đáp SQL------------ Không có câu hỏi nào là sơ đẳng -------- |
Chào admin !
Trả lờiXóaEm có 1 vấn đề thắc mắc ở đây:
Câu hỏi:thống kê năm tháng, mã vật tư, tổng số lượng xuất của các vật tư trong từng năm tháng (năm tháng có dạng YYYY-MM)
Bài giải của em như sau:
SELECT CONVERT(CHAR(6),NgayNhap,112)AS NamThang,MaVTu,SUM(SlNhap) AS TONGSOLUONGNHAP
FROM CTPNHAP a INNER JOIN PNHAP b ON a.SoPN=b.SoPN
GROUP BY NgayNhap,MaVTu
--Truy vấn vẫn chạy bình thường, nhưng kết quả lại sai, hàm SUM và GROUP BY ở trên nó không hoạt động, nó không cộng số lần nhập của từng mã vật tư.
Nhưng nếu em tạo bảng ảo
CREATE VIEW vw_TongNhap
AS
SELECT CONVERT(CHAR(6),NgayNhap,112)AS NamThang,MaVTu,SUM(SlNhap) AS TONGSOLUONGNHAP
FROM CTPNHAP a INNER JOIN PNHAP b ON a.SoPN=b.SoPN
GROUP BY NgayNhap,MaVTu
GO
Sau đó em truy vấn:
SELECT NamThang,MaVTu,SUM(TONGSOLUONGNHAP) AS TONGSLN
FROM vw_TongNhap
GROUP BY NamThang,MaVTu
ORDER BY NamThang
Thì kết quả chạy chính xác.
Mong admin giải thích giúp em tại sao GROUP BY và SUM ở trên nó chạy sai.
Em xin chân thành cám ơn !
Bạn nên thay Group by theo NgayNhap bằng Group by theo CONVERT(CHAR(6),NgayNhap,112)
XóaLý do vì bạn muốn group by theo năm tháng thôi nhưng câu lệnh group by của bạn lại là group by theo cả ngày tháng năm
XóaLy do khac biet giua 2 cau lenh la su khac biet giua CONVERT(CHAR(6),NgayNhap,112) va NgayNhap
Trả lờiXóaNgayNhap = 'YYYY-MM'
CONVERT(CHAR(6),NgayNhap,112) = 'YYYY-M'
Cau 1 ban group by NgayNhap = 'YYYY-MM', con cau 2 ban group by CONVERT(CHAR(6),NgayNhap,112) = 'YYYY-M'
Neu yeu cau cua ban la muon SUM voi group by NgayNhap,MaVTu thi cau 2 moi sai vi no group by voi NamThang = CONVERT(CHAR(6),NgayNhap,112) = 'YYYY-M'
O cau 2 truong NamThang trong group by chi dung trong nhung du lieu nhat dinh, thuc te se chay sai.
Vi du : NgayNhap1='2016-01' va NgayNhap2='2016-02'
Ro rang la NgayNhap1 != NgayNhap2, nhung CONVERT(CHAR(6),NgayNhap1,112) = CONVERT(CHAR(6),NgayNhap2,112)
bạn ơi cho mình hỏi:
Trả lờiXóamình đang có 1 store con có khai báo biến bảng trong user-defined table types
Create PROCEDURE [dbo].[sp_1]
@Table1 [U_Type_1] READONLY
và có 1 store khác cũng khai báo biến bảng có table type tương tự. Trong đó em cho thực thi store sp_1
Create PROCEDURE [dbo].[sp_2]
@Table2 [U_Type_1] READONLY
BEGIN
EXEC sp_1 @Table1 = @Table 2
END
Khi chạy thì bị báo lỗi sau:
operand type clash:[U_Type_MDM_ThuocTinhSP] is incompatible with [U_Type_MDM_ThuocTinhSP]
Lỗi này xử lý sao vậy. giúp mình với
Create PROCEDURE [dbo].[sp_MDM_Import_Item]
@CreateBy VARCHAR(10),
@Table [U_Type_MDM_Import_Items] READONLY
AS
BEGIN
SET NOCOUNT ON;
EXEC FRT_MDM.dbo.sp_MDM_Import_Item @CreateBy = @CreateBy, -- varchar(10)
@Table = @Table -- U_Type_MDM_Import_Items
END
Store nhỏ nằm bên db khác
Create PROCEDURE [dbo].[sp_MDM_Import_Item]
@CreateBy VARCHAR(10),
@Table [U_Type_MDM_Import_Items] READONLY
AS
BEGIN
----Xử lý-----
END
Do tính huống ban đầu là store nằm ở DB cũ. Nhưng sau đó được Y/C là tạo 1 DB mới có chứa các store bên DB cũ. nhưng code C# lại connect theo DB chính nên thử Exec store DB mới trong Store DB cũ. và kết quả là lỗi:
--> Operand type clash: U_Type_MDM_Import_Items is incompatible with U_Type_MDM_Import_Items
Lưu ý là user-defined table types này đã được tạo ở cả 2 DB
Biến bảng giới hạn trong mỗi db, không thể chia sẻ cho các db khác nhau. Đó là 1 trong những bất lợi trong việc sử dụng biến bảng.
Trả lờiXóaĐây là 1 trong những điều mà rất nhiều công ty mắc phải do không có sự phối hợp giữa quản trị và thiết kế database với các lập trình ứng dụng.
Với trường hợp của bạn, 1 db đã được tách ra, dẫn đến biến bảng không còn làm việc như trước. Bạn cần phải database hay sửa code để làm việc trong trường hợp này.
Sửa db, thay vì tách thành 1 db mới thì bạn có thể tách ở cấp độ schema chứ không phải db, tuy nhiên tôi nghĩ có thể bạn không phải là người quyết định.
Giải pháp ở tầng lập trình là sử dụng truy vấn động trong cái stored, kết hợp giữa biến bảng và bảng tạm bạn có thể giải quyết vấn đề này
Tuy nhiên, như bạn biết đấy, truy vấn động không phải là giải pháp ưa thích, nó hứa hẹn sẽ đem lại cho bạn nhiều điều phiền toái, tuỳ theo mức độ phức tạp của yêu cầu.
à mà nếu bên db mới mình cũng tạo 1 biến bảng giống hệt biến bảng bên db cũ thì có dùng được không ? cũng tên là [U_Type_MDM_Import_Items]
XóaKhông thể chia sẻ, mỗi biến bảng chỉ có tác dụng trong db nó được tạo ra
XóaNhận xét này đã bị tác giả xóa.
Trả lờiXóaCho em hỏi database làm trên SQL 64bit song attack bằng SQL 32bit có đọc được không
Trả lờiXóaCho em hỏi database làm trên SQL 64bit song attack bằng SQL 32bit có đọc được không
Trả lờiXóaCu attach vo tu
XóaMọi người ơi demo giúp mình về backup và restore bằng snapshot và Transactional Replication mình đã tìm kiếm trên mạng mà không hiểu cho lắm, cảm ơn mọi người
Trả lờiXóaBan noi ro hon duoc khong
Trả lờiXóaCho lược đồ CSDL Công ty thương mại được mô tả như sau:
Trả lờiXóaMột công ty thương mại chuyên kinh doanh các mặt hàng điện tử. Công ty nhập các mặt hàng từ các nhà cung cấp khác nhau. Chi tiết về các mặt hàng gồm có: mã hàng (duy nhất), tên hàng và các mô tả mặt hàng.
Công ty cũng cần lưu giữ thông tin về các nhà cung cấp như tên, địa chỉ, điện thoại, fax. mỗi nhà cung cấp có một mã duy nhất. mỗi nhà cung cấp có thể cung cấp nhiều mặt hàng nhưng mỗi mặt hàng chỉ được cung cấp từ một nhà cung cấp.
các mặt hàng được lưu giữ trong các kho. mỗi kho hàng có một diện tích khác nhau và chỉ chứa một loại mặt hàng.
Công ty có nhiều cửa hàng đại lý để bán các mặt hàng. Mỗi cửa hàng có một Mã cửa hàng, tên cửa hàng, địa chỉ, điện thoại. Hàng được cung cấp cho các cửa hàng thông qua các phiếu xuất. Thông tin trên mỗi phiếu xuất cần có mã số cửa hàng nhận hàng, ngày xuất, thông tin về các mặt hàng được xuất như tên hàng, số lượng, đơn giá, thành tiền.
YÊU CẦU:
1. Thiết kế mô hình ER
2. Từ mô hình ER chuyển sang mô hình quan hệ
3. Trả lời các truy vấn bằng ngôn ngữ Đại số quan hệ
a/ Cho biết những mặt hàng do Nhà cung cấp có tên là ‘Công ty điện tử Thành Công’
b/ Cho biết các cửa hàng có bán mặt hàng “ TiVi“ vào ngày 25/5/2017.
mọi người chỉ e với ạ....
giải giúp em câu này với ạ
Trả lờiXóahãy lấy ra 10 bài viết mới hơn bài viết đang xem
Mọi người cho mình hỏi vì sao : Khóa ngoại constraint fk_PHONGBAN_NHANVIEN1 foreign key (PHG) references PHONGBAN(MAPHG) không thể tham chiếu đến bảng PHONGBAN
Trả lờiXóacreate table NHANVIEN
(
HONV varchar(10) not null,
TENLOT varchar(10) not null,
TENNV varchar(5) not null,
MANV char(9) primary key not null,
NGSINH datetime,
DCHI varchar(30),
PHAI char(3) check (Phai in('Nam','Nu')),
LUONG float,
MA_NQL char(9),
PHG smallint,
constraint fk_NHANIEN foreign key (MA_NQL) references NHANVIEN(MANV),
constraint fk_PHONGBAN_NHANVIEN1 foreign key (PHG) references PHONGBAN(MAPHG)
)
create table PHONGBAN
(
TENPHG varchar(10) not null,
MAPHG smallint not null primary key ,
TRPHG char(9),
NG_NHANCHUC datetime default (getdate()),
constraint fk_PHONGBAN_NHANVIEN foreign key (TRPHG) references NHANVIEN(MANV)
)
cái này còn hoạt động hok ta
Trả lờiXóa