România
Roportal.ro

fraza SQL

Început de Talkabout, Dum 11 mai 2008 · 11 răspunsuri · 6.915 vizualizări

Talkabout9 mesaje#1

am un query ca cel din exemplu.

dar daca vreau sa adaug la rezultatul acestuia inca o coloana, in care sa calculeze pretul pentru acea componenta cum ar trebui sa procedez?

ex.: blat de 100 grame, cu pretul/kg 20 lei, in a 4-a coloana as vrea sa apara 2. ca formula, ar fi (gramaj*pretComponentaPerKg)/1000, dar cum adaug o a 4-a coloana, in care sa fie calculat acest pret?

p.s. rename la fisier in Ex.mdb

Ex.txt

Paul Brahtl2.177 mesaje#2

Ce anume te intereseaza: cum adaugi in Access o coloana calculata la un query, sau cum adaugi in SQL o coloana calculata?

am modificat in exemplul tau ca sa-ti dea si a patra coloana

simultan ti-am transformat si legaturile dintre tabele din clauza WHERE in INNER JOIN

Ex.txt

Talkabout9 mesaje#3

ma intereseaza cum adaug o coloana calculata, eu am o baza de date in sql server 2005 sai nu stiu acolo cum s-ar face, in Access nu e asa greu, mersi oricum

ai idee cum s-ar face din fraze sql acest lucru?

am gasit, si fraza SQL

inca o intrebare, daca m-ai putea ajuta ti-as fi recunoscator.

am atasat un avelasi exemplu, putin modificat la diagrama E-R.

cum as putea face ca atunci cand introduc o anumita pizza, si automat si componentele ei, sa nu se poata introduce pentru o pizza 2 componente care sunt incompatibile(care se afla in Incompatibilitati), deci sa nu ma lase sa introduc.

ex.: blat cu branza nu vreau sa le pot introduce pentru acelasi tip de Pizza. s-ar putea face asa ceva?

Mersi :airkiss:

oare acel Query de ce nu functioneaza cum trebuie si pe SQL Server 2005? nu primesc ceea ce trebuie, cand rulez acel query intr-o procedura stocata, iar in Access merge ok

Ex.txt

Talkabout9 mesaje#4

am incercat pentru SQL Server 2005. si pentru pizza capriciosa,(de exmplu) mi-a afisat: numeComponenta Carnati(e ok, dar nu doar componenta asta o are), gramaj 50(ok), pretComponentaPerKg 11(ok), valoare 0(nu stiu de ce, probabil nu calculeaza cu virgula? merge doar pentru impartiri exacte?)

USE [pizzerie]
GO
/****** Object:  StoredProcedure [dbo].[GetComponentsForPizza]	Script Date: 05/11/2008 20:28:19 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:		<Author,,Name>
-- Create date: <Create Date,,>
-- Description:	<Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[GetComponentsForPizza]
-- Add the parameters for the stored procedure here
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

-- Insert statements for procedure here
SELECT C.numeComponenta, R.gramaj, D.pretComponentaPerKg, R.gramaj*D.pretcomponentaperkg/1000 AS valoare
FROM pizza AS P 
INNER JOIN reteta AS R ON R.idPizza=P.idPizza
INNER JOIN componente AS C ON R.idComponenta=C.idComponenta
INNER JOIN CostComponente AS D ON C.idComponenta = D.idComponenta
WHERE P.tipPizza='sunca';
END

cam asta e procedura stocata

Editat Dum 11 mai 2008 20:25

Paul Brahtl2.177 mesaje#5

Pentru SQL 2005 pune varianta asta:

SELECT C.numeComponenta, R.gramaj, D.pretComponentaPerKg, R.gramaj*D.pretcomponentaperkg/1000 AS valoare

FROM pizza AS P

INNER JOIN reteta AS R ON R.idPizza=P.idPizza

INNER JOIN componente AS C ON R.idComponenta=C.idComponenta

INNER JOIN CostComponente AS D ON C.idComponenta = D.idComponenta

WHERE P.tipPizza='capriciosa';

Paul Brahtl2.177 mesaje#6
Talkabout a scris:
cum as putea face ca atunci cand introduc o anumita pizza, si automat si componentele ei, sa nu se poata introduce pentru o pizza 2 componente care sunt incompatibile(care se afla in Incompatibilitati), deci sa nu ma lase sa introduc.

pentru lista de componente de adaugat la o pizza poti folosi urmatoarea procedura

create procedure GetComponente(@idPizza) as

select Componente.*

from Componente

where not idComponenta in

(select I.idComponenta2 from Reteta inner join Incompatibilitati as I on Reteta.idComponenta=I.idComponenta1

where reteta.idPizza=@idPizza

union select I.idComponenta1 from Reteta inner join Incompatibilitati as I on Reteta.idComponenta=I.idComponenta2

where reteta.idPizza=@idPizza)

Talkabout a scris:
am incercat pentru SQL Server 2005. si pentru pizza capriciosa,(de exmplu) mi-a afisat: numeComponenta Carnati(e ok, dar nu doar componenta asta o are), gramaj 50(ok), pretComponentaPerKg 11(ok), valoare 0(nu stiu de ce, probabil nu calculeaza cu virgula? merge doar pentru impartiri exacte?)

Daca ai mai multe componente definite la o reteta si iti aduce doar o inregistrare, verifica sa ai si pretul introdus la ele.

Pentru valoarea 0 verifica ce tip de date ai la gramaj si la pretComponentaPerKg.

Editat Dum 11 mai 2008 20:34

Talkabout9 mesaje#7

tipul de date e int, asa e, m-am lamurit.

intr-adevar, nu am pretul/kg al tututor componentelor.

am executat procedura de mai sus GetComponente, si merge, daca pentru idPizza=8 introduc in Retete componentele 2 si 15 (aflate in Incompatibilitati), dupa ce execut procedura imi afiseaza toate componentele, mai putin cea cu id 2 si 15. dar eu am introdus manual in Reteta aceste componente pentru pizza cu id-ul 8. dar fiind incompatibile, cum pot face sa nu ma lase sa introduc?

adica scriu:

idPizza - 8

componenta - 2

gramaj- 200

pe urmatorul rand

idPizza= tot 8

componenta - 15

gramaj - 150

si daca trec la randul urmator, pare totul ok, dar 2 si 15 sunt incompatibile, deci la introducere as vrea sa nu ma lase :P

e posibil?

Talkabout9 mesaje#8

cred ca e mai greu, ca verificarea din sql sa se faca la introducere date in Reteta direct, sau se poate?

Paul Brahtl2.177 mesaje#9

Restrictia din Incompatibilitati se implementeaza la nivelul interfetei de program, nu la nivelul bazei de date.

Pentru asta ti-am dat GetComponente, ca sa nu pui utilizatorului la dispozitie in lista de componente de adaugat la reteta, componente incompatibile cu cele deja adaugate.

Talkabout9 mesaje#10

cum adaug la acel Query2 inca 2 coloane? una pentru costul manoperei pentru fiecare tip de pizza,si una cu suma dintre ultimele 2 coloane?(suma dintre valoare si cost manopera)?

am incercat dupa primul model, dar nu am reusit

am atasat fisierul, rename in .mdb

m-ai putea ajuta cu chestia asta?

mersi:)

Ex.txt

← Înapoi la Office si baze de date