PDA

View Full Version : جمع دیتا از چند دیتابیس



taknavaz123
دوشنبه 29 تیر 1394, 07:45 صبح
با سلام خدمت دوستان

فرض کنید یک اسکریپتی داریم که بوسیله اون از فروش کالاهای موجود در یک دیتابیس خروجی میگیرم

و فرض کنید 20 تا دیتابیس دیگه هم هست که این اسکریپت روی اون ها ،دونه دونه جواب میده و میزان فروش کالاهای هر دیتابیس رو به ریز هر کالا نشون میده

حالا میخوایم یه خروجی دیگه داشته باشیم.خروجی که جمع فروش هر 21 دیتابیس باشه.

یعنی اگر یک کد کالا در دیتابیس 1 و 5 و 10 و 15 بود اونها را باهم جمع کنه و در یک رکورد نشون بده و به همین ترتیب برای همه کالاها .

mjdeveloper
دوشنبه 29 تیر 1394, 10:01 صبح
Insert into #tmpTable (kala,amount)Select kala,amount From
(
Select kala,Sum(amount) as amount From Db1.table1 group by kala
Union all
Select kala,Sum(amount) as amount From Db2.table1 group by kala
Union all
Select kala,Sum(amount)as amount From Db3.table1 group by kala
) alltbl


Select kala,sum(amount) as amount from #tmpTable group by kala

تست کنید شاید جواب بده.

taknavaz123
دوشنبه 29 تیر 1394, 10:34 صبح
.....................

taknavaz123
دوشنبه 29 تیر 1394, 10:39 صبح
Insert into #tmpTable (kala,amount)Select kala,amount From
(
Select kala,Sum(amount) as amount From Db1.table1 group by kala
Union all
Select kala,Sum(amount) as amount From Db2.table1 group by kala
Union all
Select kala,Sum(amount)as amount From Db3.table1 group by kala
) alltbl


Select kala,sum(amount) as amount from #tmpTable group by kala

تست کنید شاید جواب بده.

ممنون.
این اسکریپتیه که از تک دیتابیس دیتا میگیره



Select A.Od_Cd
,Sum(quantity) Qnt
,Sum(quantity*O.vazn)/1000 TotalVazn
,Sum(quantity*A.Un_Prc) TotalPrice
,o.Vazn
From S_VW_FrooshKhales A
Left Outer Join S_ODS O On A.Od_Cd = O.Od_Cd And A.ACC_YEAR=1394

Where (A.Acc_Year=1394)

And(
(A.Fact_Date = '94/04/01')
)
And(O.Vazn Is not null)
Group BY A.Od_Cd,O.Vazn





که در اینجا OD_cd کد یک کالا و quantity تعداد اون کالاست.که البته این تعداد در وزن vazn ضرب میکنیم و کیلوگرم اون کالا رو میده.

حالا این اسکریپت شما رو چه طور میشه با این اسکریپت ادغام کرد که جمع همه دیتابیس ها رو بده

tooraj_azizi_1035
دوشنبه 29 تیر 1394, 15:30 عصر
سلام
كافيست به جاي نام ديتابيس ? بگذاريد:



CREATE PROC dbo.alldatabasequery
AS


CREATE TABLE #temp (
databasename varchar(500),
name varchar(max),
address varchar(max),
company_id varchar(max),
cost varchar(max)
)
INSERT INTO #temp
EXEC sp_MSforeachdb N'IF ''?'' NOT IN ( ''model'',''tempdb'',''master'',''msdb'')
BEGIN
Select A.Od_Cd
,Sum(quantity) Qnt
,Sum(quantity*O.vazn)/1000 TotalVazn
,Sum(quantity*A.Un_Prc) TotalPrice
,o.Vazn
From ?.dbo.S_VW_FrooshKhales A
Left Outer Join ?.dbo.S_ODS O On A.Od_Cd = O.Od_Cd And A.ACC_YEAR=1394

Where (A.Acc_Year=1394)

And(
(A.Fact_Date = '94/04/01')
)
And(O.Vazn Is not null)
Group BY A.Od_Cd,O.Vazn
END' ;


SELECT * FROM #temp




GO


EXEC dbo.alldatabasequery

taknavaz123
چهارشنبه 31 تیر 1394, 07:47 صبح
سلام
كافيست به جاي نام ديتابيس ? بگذاريد:



CREATE PROC dbo.alldatabasequery
AS


CREATE TABLE #temp (
databasename varchar(500),
name varchar(max),
address varchar(max),
company_id varchar(max),
cost varchar(max)
)
INSERT INTO #temp
EXEC sp_MSforeachdb N'IF ''?'' NOT IN ( ''model'',''tempdb'',''master'',''msdb'')
BEGIN
Select A.Od_Cd
,Sum(quantity) Qnt
,Sum(quantity*O.vazn)/1000 TotalVazn
,Sum(quantity*A.Un_Prc) TotalPrice
,o.Vazn
From ?.dbo.S_VW_FrooshKhales A
Left Outer Join ?.dbo.S_ODS O On A.Od_Cd = O.Od_Cd And A.ACC_YEAR=1394

Where (A.Acc_Year=1394)

And(
(A.Fact_Date = '94/04/01')
)
And(O.Vazn Is not null)
Group BY A.Od_Cd,O.Vazn
END' ;


SELECT * FROM #temp




GO


EXEC dbo.alldatabasequery




ممنووون.كافيست به جاي نام ديتابيس ? بگذاريد.یعنی دقیقا چه جوری؟ منظورتون همین اسکریپتیه که گذاشتین؟


چون الان اینو اجرا میکنم ارور دارم.
یه ارور syntax و ارور Could not find stored procedure 'dbo.alldatabasequery

tooraj_azizi_1035
چهارشنبه 31 تیر 1394, 09:47 صبح
هر جا كه قرار است نام ديتابيس بيايد بايد علامت سوال بگذاريد و مطمئن بشيد كه SP ايجاد شده چون خطاي بالا ميگه چنين SP وجود نداره.