Hejsan, undrar om nån vet hur hur ändrar man från detta:
F_namn E_namn Enhet
Lisa Nilsson Enh1 -- personal_id: 89
Lisa Nilsson Enh2 -- personal_id: 89
Kalle Sten Enh1
Sara Renholm Enh3
Lisa Nilsson Enh4 -- personal_id: 292
till
F_namn E_namn Enhet
Lisa Nilsson Enh1/Enh2 -- personal_id: 89
Kalle Sten Enh1
Sara Renholm Enh3
Lisa Nilsson Enh4 -- personal_id: 292
Det är tre tabeller som ligger till grund;
1. Enheter
2. Personal
3. Plats (kopplingsbox eftersom det är många-många).
Enheter:
Enhets_id, Enhet (etc)
Personal:
Id, f_namn, E_namn, telefon
Plats:
Personal_id, Enhets_Id
Min SQL för att lista fram personal och enheter ser ut så här:
SET @sqlStmt = "SELECT DISTINCT per.e_namn, per.f_namn,
enh.enhet, per.telefon FROM plats pla INNER JOIN
personal per ON pla.personal_id = per.Id INNER JOIN Enheter
enh ON pla.enhets_id = enh.enhets_id WHERE per.e_namn LIKE '" + @letter +
"%' ORDER BY " + @sortCriteria + " " + @sortOrder
Jag har suttit ganska lång tid o inte kommit på nån vettig SQL för att lösa detta.. tyckte det var mycket svårt.. om det går att lösa med SQL istället för med applikationskod skulle det vara suveränt.. :) om det inte går att lösa får det vara helt enkelt..
create function nefertite(@personal_id int)
returns varchar(200)
as
begin
declare @enheter varchar(200)
select @enheter = coalesce(@enheter + '/','') + enhet
from enheter
where enhets_id in (
select enhets_id
from plats
where personal_id = @personal_id)
return @enheter
end
anropas med
select Id, f_namn, E_namn,dbo..nefertite(id)
from personal
ooooooooo ! Jag är grymt imponerad !!!! :))) hade inte kommit på det där om jag suttit hela natten.. eller veckan för den delen.. ! att det är så lite kod.. när jag spånade blev det kaos..
hehe.. varför "nefertite"...? sökte på google.. fick att det var portugisiska.. eller namnet på faraos fru.. eller nåt band.. nåja, stort tack..!!! ska titta på koden en gång till o försöka greppa den... :)
Hej igen.. satt o höll på med SQL satsen från igår.. :) jag kom på att det inte gick att använda AS
dbo.nefertite(id) AS enhet_nef
o sen från applikationen selecta enhet_nef som en kolumn, och funderade ifall det kanske måste finnas en kolumn som heter så och inte bara ett alias?
Så jag provade att skapa en temporär tabell som då kunde returnera rätt värden till applikationen men får inte till syntaxen (om det finns enklare sätt så provar jag gärna det såklart :)
CREATE PROCEDURE dbo.coke_getAllStaffNoEmail
@sortCriteria varchar(20),
@sortOrder varchar(5)
AS
CREATE TABLE @#tableTemp
(
tmpId int IDENTITY(1,1),
e_namn varchar(30),
f_namn varchar(30),
enhet_nef varchar(100),
telefon varchar(30)
)
DECLARE @sqlStmt varchar(455)
-- Här vill jag inserta värden till #tableTemp så att jag
-- kan selecta från den sen med @sqlStmt2
SET @sqlStmt = "INSERT INTO #tableTemp
SELECT DISTINCT per.e_namn, per.f_namn,
dbo.nefertite(id) AS enhet_nef, per.telefon FROM plats pla INNER JOIN
personal per ON pla.personal_id = per.Id INNER JOIN Enheter
enh ON pla.enhets_id = enh.enhets_id
ORDER BY " + @sortCriteria + " " + @sortOrder
DECLARE @sqlStmt2 varchar(255)
SET @sqlStmt2 = "SELECT DISTINCT per.e_namn, per.f_namn,
enhet_nef, per.telefon FROM #tableTemp ORDER BY " + @sortCriteria + " " + @sortOrder
EXEC sp_executesql @sqlStmt2
GO
Sen får jag också fel att maximum längden är 128. Det är ett fel jag inte begriper mig på heller !! ibland går det att lösa genom att sätta hela SQL strängen i en variabel och testa med enkel-/dubell fnuttar.. ibland blir det fel vilket som..?? :)
ursäkta så mycket.. det funkade visst såsom det var tänkt från början.. jag som klantade mig imorse ! satt o höll på med lite annat o testade av en slump en gång till och så fungerade det plötsligt med
dbo.nefertite(id) AS enhet
jag är supernöjd.. tack för hjälpen igen !! :)
277 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849