2010-07-01 96 views
1

這裏的原始表的一瞥:MS-訪問:查詢(CONCAT多個記錄到一個)

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); 

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  

我是從這個表,可以使用下面的語句獲取信息

這是查詢返回的內容:

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等.. somethingelse231」

我很抱歉,如果這個解釋太可怕了,請讓我知道,如果我能澄清什麼

回答

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()函數以獲得wildard比較結果,而不是LOM字段中的精確匹配。

+0

非常感謝。這可能是正確的解決方案 – 2010-07-02 14:57:14

+0

即時通訊對不起,你可以解釋一下,這是什麼 – 2010-07-02 15:02:56

+0

可以幫助我將其納入我當前的sql語句 – 2010-07-02 15:12:13