• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

giúp về pivot

Nơi trao đổi về các vấn đề trong lập trình Windows Forms, Console dùng cú pháp ngôn ngữ Visual Basic .NET và C#

Điều hành viên: tungblt, vuathongtin

longnguyen852001
Thành viên chính thức
Thành viên chính thức
Bài viết: 18
Ngày tham gia: T.Sáu 17/05/2013 10:35 am
Has thanked: 1 time

giúp về pivot

Gửi bàigửi bởi longnguyen852001 » T.Ba 26/11/2013 1:40 pm

stt ngay dept sl_tu dept_toi sl_toi gio
9 2013-11-26 00:00:00.000 dry 3 qc 3 2013-11-26 11:20:07.513
10 2013-11-26 00:00:00.000 wash 3 qc 3 2013-11-26 11:24:54.403
11 2013-11-26 00:00:00.000 dry 1 wash 1 2013-11-26 13:03:37.467

DECLARE @col_list nvarchar(max)
SELECT @col_list = ISNULL(@col_list + ',', '') + QUOTENAME(CONVERT(nvarchar,gio,108))
FROM chuyenbp GROUP BY gio
DECLARE
@sql nvarchar(MAX)
SELECT @sql =' SELECT distinct ' + @col_list + ' FROM chuyenbp
pivot ( sum(sl_tu) FOR gio IN ( ' + @col_list + ') ) p'
print @sql EXEC (@sql)

?????????????????????????????????????
kết quả
11:20:07 11:24:54 13:03:37
NULL NULL NULL



longnguyen852001
Thành viên chính thức
Thành viên chính thức
Bài viết: 18
Ngày tham gia: T.Sáu 17/05/2013 10:35 am
Has thanked: 1 time

Re: giúp về pivot

Gửi bàigửi bởi longnguyen852001 » T.Tư 27/11/2013 8:54 am

không ai có kinh nghiệm vè pivot hả ad

FlyingFox
Guru
Guru
Bài viết: 809
Ngày tham gia: T.Tư 20/04/2011 9:56 am
Been thanked: 320 time

Re: giúp về pivot

Gửi bàigửi bởi FlyingFox » T.Năm 28/11/2013 6:19 am

Kết quã sai bỡi do câu lệnh query tạo ra không đúng
SELECT distinct [11:20:07],[11:24:54],[13:03:37] FROM chuyenbp pivot (sum(sl_tu) FOR gio IN ( [11:20:07],[11:24:54],[13:03:37]) ) p
bỡi vì cột gio trong table chuyenbp là datetime nên khi nó không có dữ liệu nào trong khoãng thời gian IN.
Cho nên cần phãi viết lại như sau
  1. SELECT CONVERT(VARCHAR(10), gio, 103)  AS ngay, CONVERT(nvarchar,gio,108) AS gio, sl_tu INTO #temp FROM chuyenbp
  2. DECLARE @col_list nvarchar(MAX)
  3. SELECT @col_list = ISNULL(@col_list + ',', '') + QUOTENAME(CONVERT(nvarchar,gio,108))
  4. FROM #temp GROUP BY gio
  5.  
  6. DECLARE @SQL nvarchar(MAX)
  7. SELECT @SQL =' SELECT ngay, ' + @col_list + ' FROM #temp pivot (sum(sl_tu) FOR gio IN ( ' + @col_list + ') ) p'
  8. print @SQL
  9. EXEC (@SQL)
  10.  
  11. DROP TABLE #temp

longnguyen852001
Thành viên chính thức
Thành viên chính thức
Bài viết: 18
Ngày tham gia: T.Sáu 17/05/2013 10:35 am
Has thanked: 1 time

Re: giúp về pivot

Gửi bàigửi bởi longnguyen852001 » T.Bảy 07/12/2013 11:44 am

Rất cám ơn bạn Flying Fox!!!!!!!!!!!!!!!!!!
vấn đề đã giải quyết xong, thêm 1 vấn đề nữa:
mình có 1 bảng như sau:
gio sl ca
13:00 232 1
15:04 123 1
16:02 200 1
18:23 120 1
20:30 300 2
23:00 201 2
Làm sao thêm 1 cột tính số phút như sau:

gio sl ca phut
13:00 232 1 360 (ca 1 vì thế =13:00-7:00)
15:04 123 1 124 (lấy 15:04-13:00)
16:02 200 1 58 (lấy 16:02-15:04)
18:23 120 1 141 (lấy 18:23-16:02)
20:30 300 2 90 (ca 2 vì thế =20:30-19:00)
23:00 201 2 150 (lấy 23:00-20:30)
?????????????????????????? từ 7:00 tới 19:00 là ca 1, 19:00 tới 7 giờ sáng hôm sau là ca 2)**************
rất mong nhận được sự giúp đỡ của các bạn
Chân thành cảm ơn

Hình đại diện của người dùng
xuanquy_th
Guru
Guru
Bài viết: 798
Ngày tham gia: T.Ba 05/08/2008 9:15 pm
Đến từ: Thanh Hoá
Has thanked: 1 time
Been thanked: 10 time
Liên hệ:

Re: giúp về pivot

Gửi bàigửi bởi xuanquy_th » T.Bảy 07/12/2013 2:34 pm

Sử dụng hàm
Datediff(mi,N'7:00',N'13:00')
Khi Chúa Trời đóng cánh cửa này lại, Ngài sẽ mở một cánh cửa khác cho ta.
Nhưng ta thường nhìn quá lâu vào cánh cửa đã đóng nên không thấy được có một cánh cửa khác đang mở ra cho ta!!!

Hình đại diện của người dùng
xuanquy_th
Guru
Guru
Bài viết: 798
Ngày tham gia: T.Ba 05/08/2008 9:15 pm
Đến từ: Thanh Hoá
Has thanked: 1 time
Been thanked: 10 time
Liên hệ:

Re: giúp về pivot

Gửi bàigửi bởi xuanquy_th » T.Bảy 07/12/2013 2:35 pm

Sử dụng hàm
Khi Chúa Trời đóng cánh cửa này lại, Ngài sẽ mở một cánh cửa khác cho ta.
Nhưng ta thường nhìn quá lâu vào cánh cửa đã đóng nên không thấy được có một cánh cửa khác đang mở ra cho ta!!!

longnguyen852001
Thành viên chính thức
Thành viên chính thức
Bài viết: 18
Ngày tham gia: T.Sáu 17/05/2013 10:35 am
Has thanked: 1 time

Re: giúp về pivot

Gửi bàigửi bởi longnguyen852001 » T.Bảy 07/12/2013 2:53 pm

có thể chỉ giáo cụ thể không?????????????
mình hơi gà xíu

Hình đại diện của người dùng
xuanquy_th
Guru
Guru
Bài viết: 798
Ngày tham gia: T.Ba 05/08/2008 9:15 pm
Đến từ: Thanh Hoá
Has thanked: 1 time
Been thanked: 10 time
Liên hệ:

Re: giúp về pivot

Gửi bàigửi bởi xuanquy_th » T.Bảy 07/12/2013 3:06 pm

Giả dụ Table của bạn tên là tblADayRoi thì câu lệnh viết như sau:

  1. SET Dateformat dmy
  2. SELECT gio, sl, ca,Datediff(mi,IsNull((SELECT MIN(gio) FROM tblADayRoi WHERE gio<b1.gio),N'7:00'),gio) phut FROM tblADayRoi AS b1 ORDER BY gio
Khi Chúa Trời đóng cánh cửa này lại, Ngài sẽ mở một cánh cửa khác cho ta.
Nhưng ta thường nhìn quá lâu vào cánh cửa đã đóng nên không thấy được có một cánh cửa khác đang mở ra cho ta!!!

longnguyen852001
Thành viên chính thức
Thành viên chính thức
Bài viết: 18
Ngày tham gia: T.Sáu 17/05/2013 10:35 am
Has thanked: 1 time

Re: giúp về pivot

Gửi bàigửi bởi longnguyen852001 » T.Hai 09/12/2013 9:58 am

Thanks bạn xuanquy_th rất nhiều. nhưng két quá vẫn chưa đúng bạn ơi.
SET Dateformat dmy
SELECT gio, sl, ca,Datediff(mi,IsNull((SELECT MIN(gio) FROM tblADayRoi WHERE gio<b1.gio),N'7:00'),gio) phut FROM tblADayRoi AS b1 ORDER BY gio

gio sl ca phut
13:00 232 1 360 (ca 1 vì thế =13:00-7:00)
15:04 123 1 124 (lấy 15:04-13:00)
16:02 200 1 58 (lấy 16:02-15:04)
18:23 120 1 141 (lấy 18:23-16:02)
20:30 300 2 90 (ca 2 vì thế =20:30-19:00)
23:00 201 2 150 (lấy 23:00-20:30)
?????????????????????????? từ 7:00 tới 19:00 là ca 1, 19:00 tới 7 giờ sáng hôm sau là ca 2)**************
rất mong nhận được sự giúp đỡ của các bạn
Chân thành cảm ơn

Hình đại diện của người dùng
xuanquy_th
Guru
Guru
Bài viết: 798
Ngày tham gia: T.Ba 05/08/2008 9:15 pm
Đến từ: Thanh Hoá
Has thanked: 1 time
Been thanked: 10 time
Liên hệ:

Re: giúp về pivot

Gửi bàigửi bởi xuanquy_th » T.Hai 09/12/2013 1:44 pm

ah nhầm. Bạn phải lấy Max chứ không phải lấy Min ^-^
Khi Chúa Trời đóng cánh cửa này lại, Ngài sẽ mở một cánh cửa khác cho ta.
Nhưng ta thường nhìn quá lâu vào cánh cửa đã đóng nên không thấy được có một cánh cửa khác đang mở ra cho ta!!!

longnguyen852001
Thành viên chính thức
Thành viên chính thức
Bài viết: 18
Ngày tham gia: T.Sáu 17/05/2013 10:35 am
Has thanked: 1 time

Re: giúp về pivot

Gửi bàigửi bởi longnguyen852001 » T.Hai 09/12/2013 3:46 pm

Cẳm ơn bạn đã giúp đỡ rất nhiệt tình!
nhưng khaongr thời gian >19:00 thì sao hả bạn, bạn giúp đỡ phầnn này luôn đi

20:30 300 2 90 (ca 2 vì thế =20:30-19:00)
23:00 201 2 150 (lấy 23:00-20:30)

Rất cám ơn bạn

Hình đại diện của người dùng
xuanquy_th
Guru
Guru
Bài viết: 798
Ngày tham gia: T.Ba 05/08/2008 9:15 pm
Đến từ: Thanh Hoá
Has thanked: 1 time
Been thanked: 10 time
Liên hệ:

Re: giúp về pivot

Gửi bàigửi bởi xuanquy_th » T.Bảy 17/12/2016 1:27 pm

Gắp them cái ngày di kèm nữa là OK thôi à
Khi Chúa Trời đóng cánh cửa này lại, Ngài sẽ mở một cánh cửa khác cho ta.
Nhưng ta thường nhìn quá lâu vào cánh cửa đã đóng nên không thấy được có một cánh cửa khác đang mở ra cho ta!!!


Quay về “Visual Basic .NET và C# (VB.NET & C#)”

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.5 khách