这里是原始表的一瞥:
Occurrence Number Occurrence Date 1 0 Preanalytical (Before Testing) Cup Type 2 0 Analytical (Testing Phase) 2 0 Area 3 0 Postanalytical ( After Testing) 4 0 Other Practice Code Comments
1477 2/5/2010 1.1 Specimen Mislabeled PURSLEY
1476 2/5/2010 1.1 Specimen Mislabeled HPMR
1475 2/5/2010 1.1 Specimen Mislabeled ACCIM N008710
1474 2/5/2010 1.1 Specimen Mislabeled ACCIM N008636
1473 2/5/2010 1.3 QNS-Quantity Not Sufficient SAPMC
1472 2/5/2010 1.3 QNS-Quantity Not Sufficient RMG
1471 2/5/2010 1.1 Specimen Mislabeled NMED
1470 2/5/2010 1.9 QNS- Specimen Spilled in transit MRPS
1469 2/5/2010 1.9 QNS- Specimen Spilled in transit ANESPC
1468 2/5/2010 2.22 Instrument Problem-reinject LAB
1525 2/8/2010 2.5 Other - False (+) Blanks Tecan 2 LAB
1524 2/8/2010 2.5 Other - False (+) Blanks Tecan #1 LAB Blank 019
1523 2/8/2010 2.22 Instrument Problem, 2.5 Other Tecan LAB
1519 2/8/2010 3.3A Reporting Error 4.1 LIS Problem? (see LOM 1418,1520) LAB/SJC F356028
1518 2/8/2010 1.4 Tests Missed/Wrong Test Ordered SDPTC F316628
1516 2/8/2010 1.6 Test Requisition Missing TPMCF 2 specimens both unlabeled
1515 2/8/2010 1.1 Specimen Mislabeled PALMETTO
1514 2/8/2010 1.1 Specimen Mislabeled THWR
1513 2/8/2010 1.1 Specimen Mislabeled THWR
我使用以下语句从此表中获取信息:
select mid(Lom1,1,4) as LOM, sum([Count1]) as [Count] from (
SELECT [Lab Occurrence Form].[1 0 Preanalytical (Before Testing)] as Lom1,Count([Lab Occurrence Form].[1 0 Preanalytical (Before Testing)]) AS [Count1]
FROM [Lab Occurrence Form]
WHERE ((([Lab Occurrence Form].[Occurrence Date]) Between [Forms]![Meeting_Reasons_Frequency]![Text4] And [Forms]![Meeting_Reasons_Frequency]![Text2]))
GROUP BY [Lab Occurrence Form].[1 0 Preanalytical (Before Testing)]
HAVING Count([Lab Occurrence Form].[1 0 Preanalytical (Before Testing)])<>0
UNION SELECT [Lab Occurrence Form].[2 0 Analytical (Testing Phase)], Count([Lab Occurrence Form].[2 0 Analytical (Testing Phase)]) AS [CountOf2 0 Analytical (Testing Phase)]
FROM [Lab Occurrence Form]
WHERE ((([Lab Occurrence Form].[Occurrence Date]) Between [Forms]![Meeting_Reasons_Frequency]![Text4] And [Forms]![Meeting_Reasons_Frequency]![Text2]))
GROUP BY [Lab Occurrence Form].[2 0 Analytical (Testing Phase)]
HAVING Count([Lab Occurrence Form].[2 0 Analytical (Testing Phase)])<>0
union
SELECT [Lab Occurrence Form].[3 0 Postanalytical ( After Testing)], Count([Lab Occurrence Form].[3 0 Postanalytical ( After Testing)]) AS [CountOf3 0 Postanalytical ( After Testing)]
FROM [Lab Occurrence Form]
WHERE ((([Lab Occurrence Form].[Occurrence Date]) Between [Forms]![Meeting_Reasons_Frequency]![Text4] And [Forms]![Meeting_Reasons_Frequency]![Text2]))
GROUP BY [Lab Occurrence Form].[3 0 Postanalytical ( After Testing)]
HAVING Count([Lab Occurrence Form].[3 0 Postanalytical ( After Testing)])<>0
UNION SELECT [Lab Occurrence Form].[4 0 Other], Count([Lab Occurrence Form].[4 0 Other]) AS [CountOf4 0 Other]
FROM [Lab Occurrence Form]
WHERE ((([Lab Occurrence Form].[Occurrence Date]) Between [Forms]![Meeting_Reasons_Frequency]![Text4] And [Forms]![Meeting_Reasons_Frequency]![Text2]))
GROUP BY [Lab Occurrence Form].[4 0 Other]
HAVING Count([Lab Occurrence Form].[4 0 Other])<>0
ORDER BY 1, 2)
group by mid(Lom1,1,4);
这是查询返回的内容:
LOM Count
1.1 231
1.11 21
1.3 103
1.4 6
1.5 1
1.6 25
1.8 2
1.9 88
2.1 8
2.22 5
2.24 1
2.3 1
2.4 1
2.5 29
3.2 13
3.3 8
3.3A 4
4.1 2
4.6 1
4.8 7
我需要在这里添加另一个专栏。我们说它是column3
这是需要的输出:
LOM Count column3
1.1 231 everything from original table where LOM LIKE *1.1* separated by ","
1.11 21 everything from original table where LOM=1.11 separated by ","
1.3 103 everything from original table where LOM=1.3 separated by ","
1.4 6 everything from original table where LOM=1.4 separated by ","
1.5 1 everything from original table where LOM=1.5 separated by ","
1.6 25
1.8 2
1.9 88
2.1 8
2.22 5
2.24 1
2.3 1
2.4 1
2.5 29
3.2 13
3.3 8
3.3A 4
4.1 2
4.6 1
4.8 7
prac 1
这意味着第3列中的第一个元素是“something1,something2,etc ...... somethingelse231”
如果这个解释太可怕,我道歉,如果我能澄清任何事情,请告诉我。答案 0 :(得分:1)
我找到了一个解决方案:http://www.access-programmers.co.uk/forums/showpost.php?p=272455&postcount=2
它需要编写VBA函数。我不知道在Access中使用直接SQL的方法。
Public Function Conc(Fieldx, Identity, Value, Source) As Variant
Dim cnn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim SQL As String
Dim vFld As Variant
Set cnn = CurrentProject.Connection
Set rs = New ADODB.Recordset
vFld = Null
SQL = "SELECT [" & Fieldx & "] as Fld" & _
" FROM [" & Source & "]" & _
" WHERE [" & Identity & "]=" & Value
' open recordset.
rs.Open SQL, cnn, adOpenForwardOnly, adLockReadOnly
' concatenate the field.
Do While Not rs.EOF
If Not IsNull(rs!Fld) Then
vFld = vFld & ", " & rs!Fld
End If
rs.MoveNext
Loop
' remove leading comma and space.
vFld = Mid(vFld, 3)
Set cnn = Nothing
Set rs = Nothing
' return concatenated string.
Conc = vFld
End Function
然后您可以在这样的查询中使用它:
SELECT [tblData].[ID],
Conc("Field1","ID",[ID],"tblData") AS Field1,
Conc("Field2","ID",[ID],"tblData") AS Field2
FROM tblData
GROUP BY [tblData].[ID];
修改强> 所以你的第一个查询看起来像这样:
SELECT [Lab Occurrence Form].[1 0 Preanalytical (Before Testing)] as Lom1,
Conc("NameOfTheFieldToConcatenate",
"[Lab Occurrence Form].[1 0 Preanalytical (Before Testing)]",
[Lab Occurrence Form].[1 0 Preanalytical (Before Testing)],
"[Lab Occurrence Form]"),
Count([Lab Occurrence Form].[1 0 Preanalytical (Before Testing)]) AS [Count1]
FROM [Lab Occurrence Form]
WHERE ((([Lab Occurrence Form].[Occurrence Date]) Between [Forms]![Meeting_Reasons_Frequency]![Text4] And [Forms]![Meeting_Reasons_Frequency]![Text2]))
GROUP BY [Lab Occurrence Form].[1 0 Preanalytical (Before Testing)]
HAVING Count([Lab Occurrence Form].[1 0 Preanalytical (Before Testing)])<>0
请注意,您可能需要稍微调整Conc()
函数以获得您想要的比较,而不是LOM字段上的完全匹配。