Xin giúp đỡ về câu lệnh SQL (2 người xem)

  • Thread starter Thread starter KVP
  • Ngày gửi Ngày gửi
Liên hệ QC

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

KVP

Thành viên thường trực
Tham gia
7/7/07
Bài viết
218
Được thích
301
Nghề nghiệp
Cộng đồng
Chào các anh chị,
Tôi có 1 table dữ liệu SQL ghi lại các lần cập nhật hồ sơ cá nhân của nhân viên mô tả như trong File excel đính kèm (trường SOBHXH là không thể thay đổi)
Hiện tại, tôi muốn dùng câu lệnh SQL để trích lọc ra một table liệt kê danh sách duy nhất thông tin của những SOBHXH chỉ bị thay đổi HO hoặc TEN hoặc NGAYSINH hoặc GIOITINH
Các trường hợp thay đổi thông tin khác không liệt kê

Mong nhận được sự giúp đỡ của các anh, chị

Xin cám ơn
 

File đính kèm

Chào các anh chị,
Tôi có 1 table dữ liệu SQL ghi lại các lần cập nhật hồ sơ cá nhân của nhân viên mô tả như trong File excel đính kèm (trường SOBHXH là không thể thay đổi)
Hiện tại, tôi muốn dùng câu lệnh SQL để trích lọc ra một table liệt kê danh sách duy nhất thông tin của những SOBHXH chỉ bị thay đổi HO hoặc TEN hoặc NGAYSINH hoặc GIOITINH
Các trường hợp thay đổi thông tin khác không liệt kê

Mong nhận được sự giúp đỡ của các anh, chị

Xin cám ơn
Chưa hiểu lắm yêu cầu
1/ SOBHXH: 0101029615 Ngày sinh: 25/09/1968
và SOBHXH: 0101029615 Ngày sinh: 24/09/1968
thì lấy dòng nào.
Và về giới tính cũng vậy.
2/ Bạn làm giúp 1 kết quả từ data của bạn.
3/ Câu SQL là sao, đây là file excel mà.
 
Cám ơn anh.
Để em diễn giải rõ hơn một chút
- Nếu có 2, hoặc nhiều hơn thì chỉ lấy duy nhất 1 dòng SOBHXH đó là được, không quan trọng là dòng nào
- Em xuất dữ liệu từ DATABASE SQL server 2000 ra excel để cho dễ hình dung vì có khi máy tính của các anh, chị trên diễn đàn không cài SQL server. Câu lệnh SQL dùng theo yêu cầu truy vấn này có thể là SELECT, UPDATE or DELETED .... dùng trong access hoặc Excel cũng được, em sẽ biến đổi nó một chút trong SQL server
 
Cám ơn anh.
Để em diễn giải rõ hơn một chút
- Nếu có 2, hoặc nhiều hơn thì chỉ lấy duy nhất 1 dòng SOBHXH đó là được, không quan trọng là dòng nào
- Em xuất dữ liệu từ DATABASE SQL server 2000 ra excel để cho dễ hình dung vì có khi máy tính của các anh, chị trên diễn đàn không cài SQL server. Câu lệnh SQL dùng theo yêu cầu truy vấn này có thể là SELECT, UPDATE or DELETED .... dùng trong access hoặc Excel cũng được, em sẽ biến đổi nó một chút trong SQL server
1/ Dùng Ex thì trích lọc duy nhất thôi
Tạo thêm 1 sh tên KQ và chạy code
PHP:
Sub TrichLoc()
Dim endR As Long, i As Long, s As Long, k As Long
Dim ArrKQ(), ArrData()
Dim sSo As String
Dim Dic As Object
Set Dic = CreateObject("Scripting.Dictionary")
With Sheets("Results")
  endR = .Cells(65000, 1).End(xlUp).Row
  ArrData = .Range("A2:I" & endR).Value
End With
s = 0
ReDim ArrKQ(1 To UBound(ArrData), 1 To UBound(ArrData, 2))
For i = 1 To UBound(ArrData)
  sSo = CStr(ArrData(i, 1))
  If Not Dic.Exists(sSo) Then
    s = s + 1
    Dic.Add sSo, s
    For k = 1 To UBound(ArrData, 2)
      ArrKQ(s, k) = ArrData(i, k)
    Next k
  End If
Next i
With Sheets("KQ")
  .[A2].Resize(s, k - 1) = ArrKQ
End With
Erase ArrKQ(), ArrData()
Set Dic = Nothing
End Sub

2/ Còn dùng Acc thì dùng query/group by. Cái này mình cũng mới học
PHP:
SELECT Results.SOBHXH, First(Results.HO) AS FirstOfHO, First(Results.TEN) AS FirstOfTEN, First(Results.NGAYSINH) AS FirstOfNGAYSINH, First(Results.GIOITINH) AS FirstOfGIOITINH, First(Results.SOCMND) AS FirstOfSOCMND, First(Results.NGAYCMND) AS FirstOfNGAYCMND, First(Results.DIACHI) AS FirstOfDIACHI, First(Results.JOBDATE) AS FirstOfJOBDATE
FROM Results
GROUP BY Results.SOBHXH;
 
Nếu để trích lọc duy nhất SOBHXH thì em dùng câu lệnh SELECT UNIQUE .. FROM nhưng đặc thù yêu cầu ở đây là chỉ lọc duy nhất những trường hợp có hiệu chỉnh các trường HO or TEN or NGAYSINH or GIOITINH.
Có lẽ không dùng câu lệnh SQL được vì phức tạp quá có lẽ em chưa biết được hết kỹ thuật
 
Giữa hồ sơ có chỉnh sửa và hồ sơ không chỉnh sửa khác nhau chỗ nào? Đây là mấu chốt để người ta có thể giúp bạn. Không có dấu hiệu phân biệt thì làm sao lọc?

Có phải mỗi lần chỉnh sửa 1 NV sẽ tăng thêm 1 record cho NV đó? Nếu vậy thì dùng:

SELECT Results.SOBHXH, Results.HO, Results.TEN, Results.NGAYSINH, Results.GIOITINH, Results.SOCMND, Results.NGAYCMND, Results.DIACHI, Max(Results.JOBDATE) AS MaxJOBDATE
FROM Results
GROUP BY Results.SOBHXH, Results.HO, Results.TEN, Results.NGAYSINH, Results.GIOITINH, Results.SOCMND, Results.NGAYCMND, Results.DIACHI
HAVING (((Count(Results.SOBHXH))>1));

Còn phân biệt giữa chỉnh sửa field này và chỉnh sửa field kia thì phải dùng code thôi.
 
Lần chỉnh sửa cuối:
Theo như code của bác Pmt0412 em sẽ lọc ra được một Table các NV có hồ sơ hoàn chỉnh nhất (lấy ra từ lần hiệu chỉnh cuối cùng Max(Jobdate)).
Giờ em muốn so sánh giữa Table này và table Results lấy ra những NV bị hiệu chỉnh chỉ HO hoặc TEN hoặc NGAYSINH hoặc GIOITINH thì dùng lệnh SQL như thế nào ?
 
HAVING (((Count(Results.SOBHXH))>1)) tức là chỉ lấy danh sách "có chỉnh sửa", Max(Jobdate) tức là lấy ngày cập nhật mới nhất. Chưa nói gì đến cập nhật cái gì, ở field nào. Còn phải so sánh 3 fields mình cần ở record max với các record trước đó.
 
Web KT

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

Back
Top Bottom