Du får loopa lite och hålla koll på variablerna som innehåller field1, field2 och field3. Om de är samma som förra gången - konkatenera lite och loopa vidare. Är de inte samma som förra gången - gör utskrift innan du tömmer variablerna och fyller dem igen.
Du får loopa lite och hålla koll på variablerna som innehåller field1, field2 och field3. Om de är samma som förra gången - konkatenera lite och loopa vidare. Är de inte samma som förra gången - gör utskrift innan du tömmer variablerna och fyller dem igen.
Det går att lösa i SQL i de flesta DBMS. Beroende på vilket DBMS som används behövs olika lösningar. I vissa system finns det en inbyggd aggregatfunktion som gör detta (sybase:list, mysql: group_concat). Om DBMS har stöd för egendefinierade funktioner går det att skriva en sådan som konkatenerar ihop värdena.
CREATE FUNCTION RepeatAt
(
@contractId int,
@repeatAmount smallint,
@startAtMinute smallint,
@user varchar(64),
@task varchar(max)
)
RETURNS varchar(max)
AS
BEGIN
DECLARE @Result varchar(max)
SELECT
@Result = coalesce(@Result + ';', '') + isnull(repeatAt, '')
FROM
tblContractTemplate
WHERE
@contractId = contractId AND
@repeatAmount = repeatAmount AND
@startAtMinute = startAtMinute AND
@user = [user] AND
@task = task
ORDER BY CASE
WHEN repeatAt LIKE 'M%' THEN 1
WHEN repeatAt LIKE 'Ti%' THEN 2
WHEN repeatAt LIKE 'O%' THEN 3
WHEN repeatAt LIKE 'To%' THEN 4
WHEN repeatAt LIKE 'F%' THEN 5
WHEN repeatAt LIKE 'L%' THEN 6
WHEN repeatAt LIKE 'S%' THEN 7
END
RETURN @Result
END
Sedan:
SELECT
contractId,
repeatAmount,
startAtMinute,
[user],
dbo.RepeatAt(contractId,repeatAmount,startAtMinute,[user],task) as repeatAt,
task
FROM
tblContractTemplate
GROUP BY
contractId,
repeatAmount,
startAtMinute,
[user],
task
Red: Hade visst ett gammalt fönster uppe. Bra lösning! Med SQL 2005 kan man även skapa en egen aggregatfunktion för ändamålet, gärna modellerad efter MySQL:s GROUP_CONCAT-funktion.
273 ms totalt · 4 externa anrop · v20260731065814-full.2f471f9e