Liệt kê những Hồ sơ xuất hiện 2 lần (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

thuyyeu99

Trùm Nhiều Chuyện
Tham gia
6/6/08
Bài viết
1,729
Được thích
875
Nhờ các anh chị hướng dẫn em cách thống kê những hồ sơ bên cột "Lan" mình tính 2 lần. bằng câu lệnh SQL

|
A​
|
B​
|
C​
|
1​
|
Mahs​
|
Ten​
|
Lan​
|
2​
|
1​
|GPE1|
1​
|
3​
|
1​
|GPE2|
1​
|
4​
|
1​
|GPE3|
1​
|
5​
|
1​
|GPE4|
1​
|
6​
|
1​
|GPE5|
2​
|
7​
|
1​
|GPE6|
2​
|
8​
|
1​
|GPE7|
2​
|
9​
|
1​
|GPE8|
2​
|
10​
|
3​
|GPE9|
1​
|
11​
|
3​
|GPE10|
1​
|
12​
|
3​
|GPE11|
1​
|
13​
|
3​
|GPE12|
1​
|
14​
|
4​
|GPE13|
1​
|
15​
|
4​
|GPE14|
1​
|
16​
|
4​
|GPE15|
1​
|
17​
|
4​
|GPE16|
2​
|
18​
|
4​
|GPE17|
2​
|
19​
|
4​
|GPE18|
2​
|

Kết quả

|
F​
|
2​
|
Mahs​
|
3​
|
1​
|
4​
|
4​
|

Cám ơn các anh chị quan tâm
 
Lần chỉnh sửa cuối:
Đọc xong bài viết mình lúa đến nổi chưa hiểu là lấy ra 2 mã số 1 và số 4 theo tiêu chí nào?
 
Dạ theo Cột "Lan". em ví dụ anh domfootwear là mã HS là 1. Lần thứ nhất anh mua 4 món hàng, lần thứ 2 anh mua cũng 4 món hàng. em thủyyeu99 Mhs là 3. và em chỉ mua có 1 lần thôi.
Ý em là muốn thống kê số lần khách hàng đã mua hàng từ 2 lần trở lên.(Cột số Lần định dạng là Text).

(Không biết cái này mình vừa dùng SQL và kết hợp CreateObject("Scripting.Dictionary") được không+-+-+-+)
 
Lần chỉnh sửa cuối:
Em giải được bài toán này rồi hihi. không biết có đúng không

PHP:
 sSQL = "Select Data.MaHS, Data.Lan" & _
               " FROM Data Group By Data.Lan, Data.MaHS Order By Data.MaHS, Data.Lan"

        Set Dic1 = CreateObject("Scripting.Dictionary")
            tmp1 = .Fields("MaHS")
            If Not Dic1.Exists(tmp1) Then
                IR = IR + 1
                Dic1.Add tmp1, IR
            Else
                Xuất mã HS ra
            End If

Mong các anh góp ý.
 
Lần chỉnh sửa cuối:
Đã dùng SQL sao còn dùng Dic.
Thử code này xem sao:

Mã:
Sub TH()
 Dim db As DAO.Database, rs As DAO.Recordset
   Dim j, strSQL As String
     strSQL = "SELECT MaHS,count(ten)as Lan_Mua FROM [sheet1$] group by MaHS having count(ten)>1 "
        Set db = OpenDatabase(ThisWorkbook.FullName, 0, 1, "Excel 8.0;HDR=Yes;")
          Set rs = db.OpenRecordset(strSQL)
          With Sheet1.Columns("H:I")
        .Cells.ClearContents
       Sheet1.[H2].CopyFromRecordset rs
      For j = 0 To rs.Fields.Count - 1
    .Cells(1, j + 1) = rs.Fields(j).Name
   Next
  End With
End Sub

B/xung: Mình quên mất: Cuối code phải dọn dẹp 1 chút
rs.Close
db.Colse
set rs=Nothing
set bd=Nothing
 

File đính kèm

Lần chỉnh sửa cuối:
Đã dùng SQL sao còn dùng Dic.
Thử code này xem sao:

Mã:
Sub TH()
 Dim db As DAO.Database, rs As DAO.Recordset
   Dim j, strSQL As String
     strSQL = "SELECT MaHS,count(ten)as Lan_Mua FROM [sheet1$] group by MaHS having count(ten)>1 "
        Set db = OpenDatabase(ThisWorkbook.FullName, 0, 1, "Excel 8.0;HDR=Yes;")
          Set rs = db.OpenRecordset(strSQL)
          With Sheet1.Columns("H:I")
        .Cells.ClearContents
       Sheet1.[H2].CopyFromRecordset rs
      For j = 0 To rs.Fields.Count - 1
    .Cells(1, j + 1) = rs.Fields(j).Name
   Next
  End With
End Sub

B/xung: Mình quên mất: Cuối code phải dọn dẹp 1 chút
rs.Close
db.Colse
set rs=Nothing
set bd=Nothing
Dùng Dictionay mới lọc duy nhất được chứ anh
 
Còn đây là code dùng Dictionary:

Mã:
Sub THDic()
Dim dic As Object, Tm, i
Set dic = CreateObject("Scripting.Dictionary")
With Sheet1
Tm = .Range(.[A2], .[A65536].End(3))
For i = 1 To UBound(Tm, 1)
If Not dic.Exists(Tm(i, 1)) Then
If WorksheetFunction.CountIf(.Range(.[A2], .[A65536].End(3)), Tm(i, 1)) > 1 Then
  dic.Add Tm(i, 1), Str(WorksheetFunction.CountIf(.Range(.[A2], .[A65536].End(3)), Tm(i, 1)))
  End If
  End If
Next
.Columns("K").Clear
.[K1].Resize(dic.Count) = WorksheetFunction.Transpose(dic.keys)
.[L1].Resize(dic.Count) = WorksheetFunction.Transpose(dic.items)
End With
End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
Diều kiện lọc của em là dạng text anh ah dùng Having chắc không được
 
Diều kiện lọc của em là dạng text anh ah dùng Having chắc không được

Hình như bạn chua xem kỹ, mình cũng đếm field Ten là GPE-01,GPE-02... đấy chứ
Để đồng nhất ta lọc và đếm 1 field thôi. Bạn thay câu lệnh SQL sau nha:

strSQL = "SELECT MaHS,count(MaHS)as Lan_Mua FROM [sheet1$] group by MaHS having count(MaHS)>1 "


Lần sau đừng kẻ bảng trên GPE làm ví dụ nữa, mất công làm lại ví dụ mà lại không giống nữa chứ.
 
Lần chỉnh sửa cuối:
Web KT

Bài viết mới nhất

Back
Top Bottom