Hiển thị kết quả từ 1 đến 10 / 10
  1. #1
    Tham gia
    29-03-2005
    Location
    HN
    Bài viết
    127
    Like
    0
    Thanked 2 Times in 1 Post

    Thêm thứ tự và tính tổng cột?

    Chào mọi người, tôi có một vấn đề nhỏ sau, mong mọi người giúp đỡ.
    Tôi có 1 bảng như sau:
    Ten|-So1-|-So2
    -A--|-3---|-5
    -B--|-7---|-2
    -C--|-1---|-9
    Bây giờ tôi muốn tạo một bảng khác từ bảng này nhưng có thêm cột Thứ Tự, đồng thời tính tổng 2 cột So1 vá So2

    STT|Ten-|-So1-|-So2
    -1--|-A---|-3---|-5
    -2--|-B---|-7---|-2
    -3--|-C---|-1---|-9
    ----|Tong-|-11--|-16
    Xin hỏi làm sao để thêm vào dòng Tổng ở cuối mà không làm STT ở dòng đó tự tăng thành 4.
    Và khi thêm một dòng vào bảng 1 thì bảng 2 sẽ tự động thêm STT và các dữ liệu đó vào.

    Xin cảm ơn nhiều
    Quote Quote

  2. #2
    Tham gia
    14-10-2004
    Bài viết
    564
    Like
    0
    Thanked 2 Times in 2 Posts
    trong "Ét vi eo" thì ko thể làm được cách này đâu. Trừ phi là bạn trình diễn nó dưới dạng là báo cáo (Crystal report hoặc Reporting Services)

  3. #3
    Tham gia
    29-03-2005
    Location
    HN
    Bài viết
    127
    Like
    0
    Thanked 2 Times in 1 Post
    Vâng, đúng vậy. Tôi chỉ muốn tạo ra một báo cáo in ra dưới dạng bảng như vậy thôi. Nếu anh hoặc ai đó làm được thì giúp tôi nhé

  4. #4
    Tham gia
    23-08-2007
    Bài viết
    76
    Like
    0
    Thanked 0 Times in 0 Posts
    giả sử cái bảng của bạn có tên là xyz nhé
    chạy đoạn code này xem
    ----------------------
    drop table #xyz
    create table #xyz (
    STT varchar(4),
    Ten nvarchar(4) not null,
    So1 int,
    So2 int)
    go
    insert #xyz select (select count(*) from xyz as temp where temp.Ten<=xyz.Ten) as STT,* from xyz
    go
    declare @TSo1 int,@TSo2 int
    set @TSo1=(select sum(So1) from xyz)
    set @TSo2=(select sum(So2) from xyz)
    insert #xyz values ('----','Tong',@TSo1,@TSo2)
    go
    select * from #xyz
    ---------------------------------

  5. #5
    Tham gia
    29-03-2005
    Location
    HN
    Bài viết
    127
    Like
    0
    Thanked 2 Times in 1 Post
    Cám ơn bạn. Phần tính tổng thì mình làm được. Nhưng cột Ten tôi chỉ lấy ví dụ A B C thôi chứ column thật nó không sắp xếp theo vần ABC nên thứ tự bên bảng 2 loạn cả lên so với bảng 1.
    Bạn có cách nào khác, ví dụ COUNT(*) FROM XYZ thì được tổng số hàng. Rồi cho STT chạy đến khi bằng số hàng thì nhảy ra INSERT cái Tổng kia vào
    Được sửa bởi anaxy lúc 10:59 ngày 26-11-2007

  6. #6
    Tham gia
    23-08-2007
    Bài viết
    76
    Like
    0
    Thanked 0 Times in 0 Posts
    tại vì nó tự động chèn STT theo alphabet nên thành ra bị loạn như vậy,bạn thêm 'order by Ten' hoặc 'order by STT' sau dòng này là được thôi mà
    'insert #xyz select (select count(*) from xyz as temp where temp.Ten<=xyz.Ten) as STT,* from xyz order by Ten'
    code trên là ngắn gọn nhất rồi

  7. #7
    Tham gia
    29-03-2005
    Location
    HN
    Bài viết
    127
    Like
    0
    Thanked 2 Times in 1 Post
    Ý mình là Bảng 1 nó không sắp xếp tên theo alphabet , mà trong bảng temp thì nó lại sắp xếp theo alphabet nên tuy STT vẫn tăng tự động nhưng thứ tự các dòng trong bảng 2 không giống như trong bảng 1.
    Mình muốn giữ nguyên thứ tự như trong bảng gốc (Không sắp xếp theo alphabet) chỉ muốn chèn thêm một cột STT cho các dòng, trừ dòng tính tổng ở cuối. Bạn có cách nào không, giúp tôi với

  8. #8
    Tham gia
    23-08-2007
    Bài viết
    76
    Like
    0
    Thanked 0 Times in 0 Posts
    vậy thì ko được đâu bạn àh
    theo tôi nghĩ thì khi thiết kế bảng ko ai lại thiết kế với chỉ 1 trường Ten làm khóa như bạn,nếu trong bảng của bạn có 1 trường ID và nó là khóa thì thay vì ta phải lấy field Ten làm điều kiện trong sub query thì dùng field ID sẽ tránh trường hợp đó(tất nhiên field ID bản thân nó đã được sắp xếp theo ASC trong bảng)
    tại vì cấu trúc bảng của bạn như vậy nên đành chấp nhận thôi
    hoặc có cách khác là can thiệp 1 chút vào cấu trúc bảng
    -------
    alter table xyz
    add ID int identity not null
    --------
    sau đó insert bình thường vào bảng tạm,insert xong thì dừng và nhảy đến insert tổng khối lượng
    cách này đảm bảo các row của bảng ở nguyên vị trí,nhưng bảng sau đó sẽ có thêm 1 field ID tự tăng
    chúc thành công !

  9. #9
    Tham gia
    06-02-2003
    Location
    vùng sâu vùng xa
    Bài viết
    549
    Like
    1
    Thanked 6 Times in 6 Posts
    nếu sử dụng SQL 2000 thì đọc bài này:
    http://www.databasejournal.com/featu...0894_2244821_1

    Nếu sử dụng SQL 2005 thì thao khảo hàm ROW_NUMBER()

  10. #10
    Tham gia
    29-03-2005
    Location
    HN
    Bài viết
    127
    Like
    0
    Thanked 2 Times in 1 Post
    Cám ơn thanhlv84 và xbacala. Tôi đang dùng ver2005 nhưng chỉ học theo ver2000 nên không biết nó mới có thêm hàm ROW_NUMBER() tiện lợi thế, có thể giữ nguyên sắp xếp của từng dòng

Bookmarks

Quy định

  • Bạn không thể tạo chủ đề mới
  • Bạn không thể trả lời bài viết
  • Bạn không thể gửi file đính kèm
  • Bạn không thể sửa bài viết của mình
  •