• 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

Nhờ giúp nhập dữ liệu theo chiều doc in theo chiều ngang

Chuyên mục thảo luận các vấn đề liên quan đến ứng dụng quản lý và cơ sở dữ liệu

Điều hành viên: Điều hành

muaphonui_2010
Thành viên tâm huyết
Thành viên tâm huyết
Bài viết: 475
Ngày tham gia: T.Sáu 26/11/2010 1:15 pm
Đến từ: TP.HCM
Has thanked: 173 time
Been thanked: 27 time
Liên hệ:

Nhờ giúp nhập dữ liệu theo chiều doc in theo chiều ngang

Gửi bàigửi bởi muaphonui_2010 » T.Ba 21/01/2014 9:37 am

Nhờ các bạn giúp mình với.
Mình nghĩ vấn đền này chắc có lẽ khó và không biết có logic để làm dc hay ko nữa.
Mình có 1 bảng dữ liệu (Table) có cấu trức và dữ liệu như hình sau.
Hình ảnh
Có code hay cấu SQL nào để nó ra được dữ liệu theo chiều ngang (lấy cột size trải dài theo chiều ngang lên trên)
kết quả bản in như hình dưới.
Hình ảnh
Cảm ơn các bạn.



muaphonui_2010
Thành viên tâm huyết
Thành viên tâm huyết
Bài viết: 475
Ngày tham gia: T.Sáu 26/11/2010 1:15 pm
Đến từ: TP.HCM
Has thanked: 173 time
Been thanked: 27 time
Liên hệ:

Re: Nhờ giúp nhập dữ liệu theo chiều doc in theo chiều ngang

Gửi bàigửi bởi muaphonui_2010 » T.Ba 21/01/2014 10:21 am

Mình tìm thấy code này. nhưng code này nó "Tĩnh" chứ ko "động" theo size dc. (Vì size nó không cố định, do ng dùng định nghĩa).

Mã: Chọn hết

SELECT mahang, dvt, mau, [35] AS '35', [36] AS '36', [40] AS '40'
FROM
(SELECT mahang, dvt, mau, size, soluong
FROM Table_1 ) ps
PIVOT
(SUM (soluong)
FOR size IN
( [35], [36], [40])
) AS pvt

==> code này cái Size 35,36,40 nó không "động dc, vì có thể có nhiều size nữa chứ ko phải cố định 3 size này.
Mong được giúp đỡ

cuibaphp
Thành viên chính thức
Thành viên chính thức
Bài viết: 30
Ngày tham gia: T.Ba 04/09/2012 3:04 pm
Been thanked: 15 time

Re: Nhờ giúp nhập dữ liệu theo chiều doc in theo chiều ngang

Gửi bàigửi bởi cuibaphp » T.Ba 21/01/2014 10:37 am

Bạn muốn 'động' thì dùng Building Dynamic SQL đó :D

  1. DECLARE @SQL AS NVARCHAR(500)
  2. DECLARE @ColSize AS NVARCHAR(500)
  3.  
  4. SET @ColSize = (SELECT STUFF(
  5.     (SELECT DISTINCT ', ' + quotename([SIZE], ']') FROM Table_1 FOR XML PATH('')), 1, 1, ''))
  6.  
  7. SET @SQL = ' SELECT * FROM
  8.             (SELECT mahang,dvt,mau,soluong,[size] FROM Table_1)s1
  9.                 PIVOT (
  10.                     SUM(soluong) FOR [size] IN (' + @ColSize + ')              
  11.                 )s2'
  12.  
  13. EXECUTE( @SQL)

muaphonui_2010
Thành viên tâm huyết
Thành viên tâm huyết
Bài viết: 475
Ngày tham gia: T.Sáu 26/11/2010 1:15 pm
Đến từ: TP.HCM
Has thanked: 173 time
Been thanked: 27 time
Liên hệ:

Re: Nhờ giúp nhập dữ liệu theo chiều doc in theo chiều ngang

Gửi bàigửi bởi muaphonui_2010 » T.Ba 21/01/2014 2:03 pm

CẢM ƠN BẠN NHIỀU.
Mình đã làm theo code của bạn dc rồi, mình làm như sau:

Mã: Chọn hết

  Try
            Dim adapter As New SqlDataAdapter()

            Dim cmd As New SqlCommand("causql1", connect)
            cmd.CommandType = CommandType.StoredProcedure

            adapter.SelectCommand = cmd
            Dim dt As New DataTable()
            adapter.Fill(dt)

            connect.Open()
            cmd.ExecuteNonQuery()
            connect.Close()
            cmd.Dispose()
            GridControl1.DataSource = dt
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try

Nếu bạn thêm cho mình được cột Sum ở cuối cùng thì thật là tuyệt, nhưng thấy như trên vẫn thỏa mãn, xung xướng lắm rồi.
Chân thành cảm ơn bạn.

muaphonui_2010
Thành viên tâm huyết
Thành viên tâm huyết
Bài viết: 475
Ngày tham gia: T.Sáu 26/11/2010 1:15 pm
Đến từ: TP.HCM
Has thanked: 173 time
Been thanked: 27 time
Liên hệ:

Re: Nhờ giúp nhập dữ liệu theo chiều doc in theo chiều ngang

Gửi bàigửi bởi muaphonui_2010 » T.Năm 20/02/2014 4:08 pm

Chào các bạn!
Hôm trước mình chạy cấu SQL trên , mình không truyền tham số vào nên thấy nó chạy ok, nhưng hôm nay mình thêm truyền tham số vào nó báo lỗi
Nhờ các bạn xem giúp mình với.
Mình viết trong Procedure

Mã: Chọn hết

ALTER Procedure [dbo].[inphieu]
@txtid int
As
DECLARE @SQL AS NVARCHAR(500)
DECLARE @ColSize AS NVARCHAR(500)

SET @ColSize = (SELECT STUFF(
        (SELECT DISTINCT ', ' + quotename([SIZE], ']') FROM Q_inphieu_ngang FOR XML PATH('')), 1, 1, ''))
 
SET @SQL = ' SELECT * FROM
                        (SELECT id, makhach,tenkhach,diachi,dienthoai,congtienhang,conggiamgia,tienthue,tongcong, mahang,tenhang,dvt,mau,soluong,dongiaban,[size] FROM Q_inphieu_ngang WHERE id = @txtid)s1
                                PIVOT (
                                        SUM(soluong) FOR [size] IN (' + @ColSize + ')                         
                                )s2'
EXECUTE( @SQL)

Rồi text trong SQL nó báo như thế này

Mã: Chọn hết

USE [quanlynoibo_doc]
GO
DECLARE   @return_value int
EXEC   @return_value = [dbo].[inphieu]
      @txtid = NULL
SELECT   'Return Value' = @return_value
GO

Nó báo lỗi vậy mình ko biết sửa sao hết, nhờ các bạn chỉ giúp mình với,lần đầu dùng cái Procedure mình không biết.

Còn trong VB.Net mình viết như sau:

Mã: Chọn hết

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
         Try
            Dim adapter As New SqlDataAdapter()

            Dim cmd As New SqlCommand("inphieu", connect)
            cmd.CommandType = CommandType.StoredProcedure
            cmd.Parameters.AddWithValue("@txtid", Val(360))
            adapter.SelectCommand = cmd
            Dim dt As New DataTable()
            adapter.Fill(dt)

            connect.Open()
            cmd.ExecuteNonQuery()
            connect.Close()
            cmd.Dispose()
            GridControl1.DataSource = dt
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub

Nhờ các bạn chỉ giúp mình với.

---------
Mình có thêm 1 vấn đề nữa là :
Khi mình có được cái DataTable dữ liệu trên "adapter.Fill(dt)"
Giờ mình chuyển sang "In Phiếu Giao Hàng"
Nhưng mình gặp vấn đề là Các cột "mã hàng, tên hàng, số lượng, đơn giá, thành tiền nó cố định , nhưng cột size nó động thì là sao in được các bạn nhỉ.
Mình nói lại cho các bạn hiểu ý mình.
Cấu trúc DataTable như sau: mahang, tenhang, soluong, don gia, thanhtien, size35, size36, size37, sizeA, sizeB.....==> cột size là động.
Vậy làm sao in được phiếu giao hàng khi chưa biết trước được số cột size các bạn nhỉ.
Mình nghĩ không ra được giải pháp co vấn đề này. Mong các bạn chỉ giúp mình với.

muaphonui_2010
Thành viên tâm huyết
Thành viên tâm huyết
Bài viết: 475
Ngày tham gia: T.Sáu 26/11/2010 1:15 pm
Đến từ: TP.HCM
Has thanked: 173 time
Been thanked: 27 time
Liên hệ:

Re: Nhờ giúp nhập dữ liệu theo chiều doc in theo chiều ngang

Gửi bàigửi bởi muaphonui_2010 » T.Hai 13/06/2016 9:02 pm

Chào bạn cuibaphp !
DECLARE @SQL AS NVARCHAR(500)
DECLARE @ColSize AS NVARCHAR(500)

SET @ColSize = (SELECT STUFF(
(SELECT DISTINCT ', ' + quotename([SIZE], ']') FROM Table_1 FOR XML PATH('')), 1, 1, ''))

SET @SQL = ' SELECT * FROM
(SELECT mahang,dvt,mau,soluong,[size] FROM Table_1)s1
PIVOT (
SUM(soluong) FOR [size] IN (' + @ColSize + ')
)s2'

EXECUTE( @SQL)

Giờ mình muốn sắp xếp theo cột SIZE thì phải làm sao vậy bạn.
Vì hiện tại nó đang sắp xếp theo mã hàng rồi mưới tới SIZE, nên Cột SIZE nó nhãy lung tung lắm, Có thế nó nhãy SiZE 40, 38, 39,
Mình Muốn Nó theo SIZE 38,39,40 thì phải thêm như thế nào vậy bạn.
Nhờ bạn nào biết giúp mình với nhé.
Xin chân thành cảm ơn!!


Quay về “Ứng dụng Quản lý và Cơ sở dữ liệu”

Đ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.1 khách