2009-09-11 27 views
6

đây là truy vấn phức tạp hiện tại được đưa ra dưới đây.MS ACCESS: Làm cách nào tôi có thể tính giá trị khác biệt bằng truy vấn truy cập?

SELECT DISTINCT Evaluation.ETCode, Training.TTitle, Training.Tcomponent, Training.TImpliment_Partner, Training.TVenue, Training.TStartDate, Training.TEndDate, Evaluation.EDate, Answer.QCode, Answer.Answer, Count(Answer.Answer) AS [Count], Questions.SL, Questions.Question 
FROM ((Evaluation INNER JOIN Training ON Evaluation.ETCode=Training.TCode) INNER JOIN Answer ON Evaluation.ECode=Answer.ECode) INNER JOIN Questions ON Answer.QCode=Questions.QCode 
GROUP BY Evaluation.ETCode, Answer.QCode, Training.TTitle, Training.Tcomponent, Training.TImpliment_Partner, Training.Tvenue, Answer.Answer, Questions.Question, Training.TStartDate, Training.TEndDate, Evaluation.EDate, Questions.SL 
ORDER BY Answer.QCode, Answer.Answer; 

Có một cột Training.TCode khác. Tôi cần phải tính toán Training.TCode riêng biệt, ai cũng có thể giúp tôi? Nếu bạn cần biết thêm thông tin xin vui lòng cho tôi biết

+0

xin đừng cố gắng sử dụng count (biệt col), vì MS Access không hỗ trợ count (riêng biệt). cảm ơn vì sự hợp tác của bạn. – Sadat

Trả lời

4

thử

select ..., count(distinct Training.Tcode) as ..., ... 

EDIT - vui lòng bây giờ nhìn vào này ...

Hãy mã SQL sau. Các lựa chọn đầu tiên là cách SQL Server sẽ làm việc này và truy vấn thứ hai nên truy cập phù hợp ...

declare @t table (eCode int, tcode int) 
insert into @t values(1,1) 
insert into @t values(1,1) 
insert into @t values(1,2) 
insert into @t values(1,3) 
insert into @t values(2,2) 
insert into @t values(2,3) 
insert into @t values(3,1)  

select 
    ecode, count(distinct tCode) countof 
from 
    @t 
group by 
    ecode 

select ecode, count(*) 
from 
    (select distinct tcode, ecode 
    from @t group by tcode, ecode) t 
group by ecode 

Nó trả về như sau:

ecode tcode 
1  3 (there are 3 distinct tcode for ecode of 1) 
2  2 (there are 2 distinct tcode for ecode of 2) 
3  1 (there is 1 distinct tcode for ecode of 3) 
+0

bạn đã thử chưa? nó không hoạt động ở đây. – Sadat

+0

xin lỗi bỏ qua tôi, tôi đã bỏ lỡ thẻ ACCESS – Rippo

+0

nhưng bạn vẫn có thể giúp tôi ... – Sadat

-1

thử điều này:

SELECT DISTINCT e.ETCode, t.TTitle, t.Tcomponent, 
     t.TImpliment_Partner, t.TVenue, t.TStartDate, 
     t.TEndDate, e.EDate, a.QCode, a.Answer, 
     q.SL, q.Question, 
     Count(a.Answer) AnswerCount, 
     Min(Select Count(*) 
     From (Select Distinct TCode From Training) As Z) TCodeCount  
FROM Evaluation As e 
    JOIN Training AS t ON e.ETCode=t.TCode 
    JOIN Answer AS a ON e.ECode=a.ECode 
    JOIN Questions AS q ON a.QCode=q.QCode 
GROUP BY e.ETCode, a.QCode, t.TTitle, t.Tcomponent, 
    t.TImpliment_Partner, t.Tvenue, a.Answer, q.Question, 
    t.TStartDate, t.TEndDate, Evaluation.EDate, q.SL 
ORDER BY a.QCode, a.Answer; 
+0

tôi nghĩ bạn chưa thử hoặc không quan tâm đến cơ sở dữ liệu truy cập. trong ms truy cập count (khác biệt col) là không được phép, nó ném lỗi cú pháp như 'thiếu nhà điều hành' – Sadat

+0

@ Sadat, bạn là đúng, tôi đã quên cách truy cập SQL khác nhau là ... Sau đó, bạn sẽ cần một subquery thay thế .. Tôi đã chỉnh sửa để bao gồm rằng –

+0

vẫn còn này không hoạt động. trước hết bạn phải sử dụng rõ ràng 'as' cho bí danh. tôi đã đặt nó, nhưng vẫn còn lỗi ở đó. – Sadat

2

Tôi đã đăng câu hỏi tương tự khoảng một năm trước trong các nhóm của Google. Tôi nhận được một câu trả lời tuyệt vời:


Một crosstab có thể làm (từ một đề xuất ban đầu từ Steve Dassin) miễn như bạn đếm một trong hai quỹ, một trong hai subfund:

TRANSFORM COUNT(*) AS theCell 
    SELECT ValDate, 
     COUNT(*) AS StandardCount, 
     COUNT(theCell) AS DistinctCount 
    FROM tableName 
    GROUP BY ValDate 
    PIVOT fund IN(Null) 

đó, cho mỗi ngày (nhóm), sẽ trả lại số lượng hồ sơ và số tiền khác nhau (khác biệt) là số .

Thay đổi

PIVOT fund IN(Null) 

để

PIVOT subfund IN(Null) 

để có được giống nhau, cho tiểu quỹ.

Hy vọng nó có thể giúp đỡ, Vanderghast, truy cập MVP


Tôi không biết nếu điều đó sẽ làm việc, nhưng here's a link to that post.

+0

cảm ơn trước. tôi sẽ kiểm tra nó càng sớm càng tốt và cho bạn biết. – Sadat

2

Sadat, sử dụng một subquery như thế này:

SELECT DISTINCT Evaluation.ETCode, Training.TTitle, Training.Tcomponent, Training.TImpliment_Partner, Training.TVenue, Training.TStartDate, Training.TEndDate, Evaluation.EDate, Answer.QCode, Answer.Answer, Count(Answer.Answer) AS [Count], Questions.SL, Questions.Question, 
(SELECT COUNT(*) FROM Training t2 WHERE t2.TCode = Evalution.ETCode) as TCodeCount 
FROM ((Evaluation INNER JOIN Training ON Evaluation.ETCode=Training.TCode) INNER JOIN Answer ON Evaluation.ECode=Answer.ECode) INNER JOIN Questions ON Answer.QCode=Questions.QCode 
GROUP BY Evaluation.ETCode, Answer.QCode, Training.TTitle, Training.Tcomponent, Training.TImpliment_Partner, Training.Tvenue, Answer.Answer, Questions.Question, Training.TStartDate, Training.TEndDate, Evaluation.EDate, Questions.SL 
ORDER BY Answer.QCode, Answer.Answer; 
+1

Tôi sẽ đề nghị thực hiện chế độ xem trên bảng Đào tạo hoàn chỉnh với số (*) nếu cần. Sau đó, tham gia vào phiên bản VIEW thay vì trực tiếp bảng. Đề xuất này sẽ làm điều tương tự. –

2

tôi quản lý để làm một giá trị riêng biệt đếm trong Access bằng cách làm như sau:

select Job,sum(pp) as number_distinct_fruits 

from 

(select Job, Fruit, 1 as pp 

from Jobtable group by Job, Fruit) t 

group by Job 

Bạn phải cẩn thận như thể có một trường trống/rỗng (trong trường mã trái của tôi), nhóm sẽ tính số đó dưới dạng bản ghi.Mệnh đề Where ở phần bên trong sẽ bỏ qua các mệnh đề đó. Tôi đã đặt nó trên blog của mình, nhưng lo ngại rằng tôi đã phát hiện ra câu trả lời quá dễ dàng - những người khác ở đây dường như nghĩ rằng bạn cần hai truy vấn phụ để thực hiện công việc này. Giải pháp của tôi có khả thi không? Distinct groupings in Access

0

Tôi sẽ đề xuất

select R_rep,sum(pp) as number_distinct_Billnos from (select R_rep, Billno, 1 as pp from `Vat_Sales` group by R_rep, Billno) t group by R_rep 
Các vấn đề liên quan