Avatar billede henrik20 Nybegynder
10. maj 2010 - 12:00 Der er 13 kommentarer og
1 løsning

Query der samler tekst fra flere rækker i én celle

Hey

Jeg sidder med en access tabel med 5 kolonner og 10 rækker, hvor cellerne i sidste kolonne for hver række indeholder tekst.

Kan man lave en query, hvor al tekst fra de fem celler i sidste kolonne, samles i den sidste celle i øverste række.

Material  | Insp. Lot  | Batch | Comments
80022901 | 04000009  | 22106    |(HER SKAL TEKSTEN SAMLES)
80022901 | 04000009  |          |Batchen har ikke været
80022901 | 04000009  |          |sendt til analyse
80022901 | 04000009  |          |blablabla
80022901 | 04000009  |          |osv osv...


vh
Henrik
Avatar billede terry Ekspert
10. maj 2010 - 12:24 #1
It will be possible if there is a field which can make each row unique and also indicate which order the texts are to be concatentated into one field..


You should also follow upp on other open questions you have!
Avatar billede henrik20 Nybegynder
10. maj 2010 - 13:22 #2
Hey Terry

kolonnen "insp. lot" er entydig. derudover har jeg faktisk en kolonne der hedder "line" som indikerer concatineringsrækkefølgen. værdierne i "line" er 001, 002, 003, osv....


Jeg rydder op i åbne SPM asap.


/henrik
Avatar billede terry Ekspert
10. maj 2010 - 14:47 #3
"kolonnen "insp. lot" er entydig" NOT in your example!

I think I need a bit more infromation before I can give a suggestion to an answer.

Are you trying to convert 10 records into a single record?

Which Line number does the record have which is to contain all texts?


The reason why I'm asking is this. If you wanted to convert the records into one then you should use VBA code to convert your data once and for all (permanently)

If you want to keep all recortds and opnly show a single record with the concatenated texts then you should do it with SQL using a number of sub selects.
Avatar billede henrik20 Nybegynder
11. maj 2010 - 08:13 #4
Ja, jeg prøver at konvertere X records, til 1.

Den record der skal indeholde al tekst har altid "line number" 001

Jeg vil gerne beholde alle records, så det må være SQL vi er ude efter.

Men der er i virkeligheden mange rækker, med forskellige "insp. lot" numre, hvor hvert "insp lot" nummer har en række records med "line number" 001-00X

Alle disse mange "insp. lot" skal have deres tekst samlet under hver deres line 001.


/henrik
Avatar billede terry Ekspert
11. maj 2010 - 08:45 #5
001-00X

How shoulod I understand that, is 001 to 010 ?

or is X an unknown value?
Avatar billede henrik20 Nybegynder
11. maj 2010 - 15:06 #6
x betyder et eller andet tal. Der kan være alt fra 2 til 30 "line number" rækker. X indikerer bare at antallet at rækker varierer fra "insp lot" til "insp lot".

/henrik
Avatar billede terry Ekspert
11. maj 2010 - 15:27 #7
You wont be able to do this in a single SQL unless you make a function (VBA).
Avatar billede henrik20 Nybegynder
12. maj 2010 - 08:00 #8
Hvordan gør jeg det?
Avatar billede terry Ekspert
12. maj 2010 - 09:16 #9
I can give you some ideas but I dont think I'll have much time for a while to do it for you.

And if this problem has anything to do with your newest question then I would consider finding a better solution.

I have a feeling that this is going to be too much for you, but here goes anyway.

You need to make a function which openes a recordset with the records with line number = "001" (The ones which are to contain all texts)

Loop through the recordset and for each record you now open another recordset which contains the matching records appart from the one where Line number = "001"
You need to select these sorted on  Line number so that you have them in the correct order.


Now loop through these records appending the text followed by a space to the record inthe first recordset.

Do this for all records in both recordsets.
Avatar billede terry Ekspert
13. maj 2010 - 17:44 #10
here comes and answer :o)

and a good weekend too
Avatar billede henrik20 Nybegynder
17. maj 2010 - 14:16 #11
Ganske kort. Er det noget i stil med nedenstående du refererer til, dog med andre tabeller?




CREATE FUNCTION [dbo].[ufnVendorOnSameLine](@Id int,@Delimiter varchar(10))

RETURNS nvarchar(max)

AS


BEGIN

DECLARE @OnSameLine varchar(max)

set @OnSameLine=''


SELECT @OnSameLine = @OnSameLine + coalesce (Purchasing.Vendor.Name,'')+@Delimiter

FROM  Purchasing.ProductVendor INNER JOIN Purchasing.Vendor

      ON Purchasing.ProductVendor.VendorID = Purchasing.Vendor.VendorID

WHERE (Purchasing.ProductVendor.ProductID = @Id)


set @OnSameLine = substring(@OnSameLine,1,len(@OnSameLine)-1)

RETURN @OnSameLine


END;


SELECT DISTINCT Production.Product.Name AS [Product Name],

                Production.Product.ProductNumber,

                dbo.ufnVendorOnSameLine(ProductVendor.ProductID,', ') AS Vendors

FROM Production.Product INNER JOIN Purchasing.ProductVendor

    ON Production.Product.ProductID = Purchasing.ProductVendor.ProductID

ORDER BY [Product Name]
Avatar billede henrik20 Nybegynder
17. maj 2010 - 15:01 #12
Det har var tilstrækkeligt.

SELECT [tblData].[ID], Conc("Field1","ID",[ID],"tblData") AS Field1, Conc("Field2","ID",[ID],"tblData") AS Field2
FROM tblData
GROUP BY [tblData].[ID];
Avatar billede henrik20 Nybegynder
17. maj 2010 - 15:12 #13
vel at mærke sammen med den her:

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
Avatar billede terry Ekspert
17. maj 2010 - 16:18 #14
Havent had much time to answer, off on a short holiday tomorrow.

Glad to hear you found a solution.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester