Jump to content

Recommended Posts

Posted

Boas,

Eu tenho um função que devolve x informação em determinadas datas, então que gostaria que essas datas aparecem no seguinte formato.

loja artigosHoje DataHoje artigosOntem DataOntem

aa 2 11-06-2013 5 10-06-2013

bb 4 11-06-20013 2 10-06-2013

neste momento tenho o resultado a devolver da seguinte maneira

loja artigosHoje DataHoje

aa 2 11-06-2013

bb 4 11-06-2013

aa 5 10-06-2013

bb 2 10-06-2013

a query utilizada é

SELECT Loja, artigos as ArtigosHoje, Data as DataHoje FROM dbo.fnLoja('11-06-2013','11-06-2013')
union
SELECT Loja, artigos as ArtigosOntem, Data as DataOntem FROM dbo.fnLoja('10-06-2013','10-06-2013')
Posted (edited)

Vê se assim ajuda:

SELECT 
Lojas.Loja as Loja,
vendasHoje.artigos as ArtigosHoje, vendasHoje.Data as DataHoje, 
vendasOntem.artigos as ArtigosOntem, vendasOntem.Data as DataOntem 
FROM dbo.TabelaDeLojas as Lojas
left join 
(
SELECT Loja, artigos as ArtigosOntem, Data as DataOntem 
FROM dbo.fnLoja('10-06-2013','10-06-2013')
) vendasOntem
on Lojas.Loja = vendasOntem.Loja
Left join 
(
SELECT Loja, artigos as ArtigosHoje, Data as DataHoje 
FROM dbo.fnLoja('11-06-2013','11-06-2013')
) vendasHoje
on Lojas.Loja = vendasHoje.Loja
where vendasOntem.Loja is not null
or vendasHoje.Loja is not null

Edited by AntonioMateus
Posted

Boas,

Eu estou a usar estas query no Reporting Services.

No SQL Server, o resultado que me é devolvido está correcto. Mas quando tento criar o DataSets no reporting services, dá o seguinte erro

"could not create a list of fields for the query. verify that you can connect to the data source and that your query syntax is correct an item with the same key has already been added"

Posted

Novo problema... pois aumentei uma pouco mais a query

SELECT
Lojas.Loja AS Loja,
vendasHoje.artigos AS ArtigosHoje, vendasHoje.DATA AS DataHoje,
vendasOntem.artigos AS ArtigosOntem, vendasOntem.DATA AS DataOntem
FROM dbo.TabelaDeLojas AS Lojas
LEFT JOIN
(
SELECT Loja, artigos AS ArtigosOntem, DATA AS DataOntem,Floor(((Artigos/(SELECT Artigos FROM dbo.fnLoja('06-13-2012 ','06-13-2012 ')))*100)-100) as MaisMenos
FROM dbo.fnLoja('10-06-2013','10-06-2013')
) vendasOntem
ON Lojas.Loja = vendasOntem.Loja
LEFT JOIN
(
SELECT Loja, artigos AS ArtigosHoje, DATA AS DataHoje, Floor(((Artigos/(SELECT Artigos FROM dbo.fnLoja('06-13-2012 ','06-13-2012 ')))*100)-100) as MaisMenos
FROM dbo.fnLoja('11-06-2013','11-06-2013')
) vendasHoje
ON Lojas.Loja = vendasHoje.Loja
WHERE vendasOntem.Loja IS NOT NULL
OR vendasHoje.Loja IS NOT NULL

Estou a tentar realizar uma SubQuery... O que é que eu pretendo com essa query o valor do artigo de hoje a dividir com o artigo do mesmo dia do ano anterior, Mas eu o seguinte erro

"Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression."

Colocando o select top 1, o erro desaparece, mas o valor do ano anterior é sempre o mesmo, como faço para o artigo fique associado a uma loja?

Posted
SELECT Lojas.Loja AS Loja,
   vendasHoje.artigos AS ArtigosHoje, vendasHoje.DATA AS DataHoje, Floor(((COALESCE(ISNULL(vendasOntem.artigos, 0)/NULLIF(vendasOntemAnoAnterior.artigos, 0), 0))*100)-100) AS Hoje_AnoAnterior
   vendasOntem.artigos AS ArtigosOntem, vendasOntem.DATA AS DataOntem, Floor(((COALESCE(ISNULL(vendasOntem.artigos, 0)/NULLIF(vendasOntemAnoAnterior.artigos, 0), 0))*100)-100) AS Ontem_AnoAnterior
FROM dbo.TabelaDeLojas AS Lojas
LEFT JOIN (
SELECT Loja, artigos, DATA
FROM dbo.fnLoja(DATEADD(day, -1, cast(CURRENT_TIMESTAMP AS date)),DATEADD(day, -1, cast(CURRENT_TIMESTAMP AS date)))) AS vendasOntem
ON Lojas.Loja = vendasOntem.Loja
LEFT JOIN (
SELECT Loja, artigos, DATA
FROM dbo.fnLoja(cast(CURRENT_TIMESTAMP AS date),cast(CURRENT_TIMESTAMP AS date))) AS vendasHoje
ON Lojas.Loja = vendasHoje.Loja
LEFT JOIN (
SELECT Loja, artigos
FROM dbo.fnLoja(DATEADD(year, -1, cast(CURRENT_TIMESTAMP AS date)),DATEADD(year, -1, cast(CURRENT_TIMESTAMP AS date)))) AS vendasHojeAnoAnterior
ON Lojas.Loja = vendasHojeAnoAnterior.Loja
LEFT JOIN (
SELECT Loja, artigos
FROM dbo.fnLoja(DATEADD(year, -1, DATEADD(day, -1, cast(CURRENT_TIMESTAMP AS date))),DATEADD(year, -1, DATEADD(day, -1, cast(CURRENT_TIMESTAMP AS date))))) AS vendasOntemAnoAnterior
ON Lojas.Loja = vendasOntemAnoAnterior.Loja
WHERE vendasOntem.Loja IS NOT NULL OR vendasHoje.Loja IS NOT NULL

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.