PDA

View Full Version : شمردن سطرهای 5 جدول و قراردادن در یک جدول مجازی یا واقعی



bazardeh
دوشنبه 23 خرداد 1390, 11:22 صبح
با سلام
امیدوارم منظورم درست برسونم
من 5 جدول دارم توی sql
می خوام یک جدول مجازی (دیدگاه) ایجاد کنم که نعداد سطر های اون جداول رو بشمرم که کد sql اش هم اینه


select count(*) from student

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

mehdi.mousavi
دوشنبه 23 خرداد 1390, 12:02 عصر
سلام.
برای بدست آوردن مجموع تعداد رکوردهای اون 5 جدول، میتونید بدین شکل عمل کنید:

;WITH cte AS(
SELECT
MAX(i.rows) AS TotalRows
FROM
sysobjects o,
sysindexes i
WHERE
o.xtype = 'U' AND i.id = OBJECT_ID(o.name) AND
o.name in ('aspnet_Profile', 'aspnet_Paths', 'aspnet_Users')
GROUP BY
o.name
)
SELECT SUM(TotalRows) FROM cte

که در اون


aspnet_Profile
aspnet_Paths
و aspnet_Users

نام جداول هستن. شما می تونید نام جداولتون رو در اون بخش از query قرار بدید تا به هدفتون برسید. در مورد Insert کردن در جدول موقت هم میتونید بدین شکل عمل کنید:


CREATE TABLE #MyTempTable
(
[IndexId] INT IDENTITY (1, 1) NOT NULL,
[Whatever] INT
)


و در نهایت، با یک INSERT Command میتونید داده مورد نظر رو در #MyTempTable درج کنید (که گمان نمیکنم نیازی به مثال داشته باشه).

موفق باشید.

bazardeh
دوشنبه 23 خرداد 1390, 12:33 عصر
جناب آقای موسوی تشکر
مشکلم حل شد
من برای هر یک از جداول یک دیدگاه view ساختم و از همه دیدگاه ها یک دیدگاه دیگر ساختم و مشکلم فعلا در راحترین شکل حل شده


create view stu(stu)
as select count(*) from student

create view tea(tea)
as select count(*) from teacher

create view les(les)
as select count(*) from lesson

create view cla(cla)
as select count(*) from class

create view us(us)
as select count(*) from user1

create view yea(yea)
as select count(*) from year

create view sab(sab)
as select count(*) from sabtnam

create view cou(stu,tea,sab,les,cla,us,yea)
as select stu,tea,sab,les,cla,us,yea from stu,tea,sab,les,cla,us,yea

محمد سلیم آبادی
سه شنبه 24 خرداد 1390, 04:02 صبح
من برای هر یک از جداول یک دیدگاه view ساختم و از همه دیدگاه ها یک دیدگاه دیگر ساختم و مشکلم فعلا در راحترین شکل حل شده
بنظر میرسه قصد دارین تعداد سطرهای هر جدول را در یک ستون بصورت تفکیک شده نشون بدین
خب نیازی به چندین ویو وجود نداره یک ویو کافی هست. یعنی:

create view cou(stu,tea,sab,les,cla,us,yea)
as select *
from (select count(*) from student) stu(stu),
(select count(*) from teacher) tea(tea),
(select count(*) from sabtnam) sab(sab),
(select count(*) from lesson) les(les),
(select count(*) from class) cla(cla),
(select count(*) from user1) us(us),
(select count(*) from year) yea(yea);

یا حتی ساده تر:

create view cou(stu,tea,sab,les,cla,us,yea) as
select (select count(*) from student),
(select count(*) from teacher),
(select count(*) from sabtnam),
(select count(*) from lesson),
(select count(*) from class),
(select count(*) from user1),
(select count(*) from year);

محمد سلیم آبادی
سه شنبه 24 خرداد 1390, 04:15 صبح
همچنین میتونید به این مقاله زیر که در حدود یک سال پیش نوشتم مراجعه کنید:
http://www.30sharp.com/article/13/232/11/%D8%A8%D8%AF%D8%B3%D8%AA-%D8%A2%D9%88%D8%B1%D8%AF%D9%86-%D9%84%DB%8C%D8%B3%D8%AA-%D8%AC%D8%AF%D8%A7%D9%88%D9%84-%D8%A8%D8%A7%D9%86%DA%A9-%D9%87%D9%85%D8%B1%D8%A7%D9%87-%D8%A8%D8%A7-%D8%AA%D8%B9%D8%AF%D8%A7%D8%AF-%D8%B3%D8%B7%D8%B1%D9%87%D8%A7%DB%8C-%D9%85%D9%88%D8%AC%D9%88%D8%AF-%D8%AF%D8%B1-%D8%A2%D9%86.aspx

حمیدرضاصادقیان
سه شنبه 24 خرداد 1390, 10:21 صبح
البته مناسبترین راه همونی هست که جناب موسوی ارائه دادن/چون راهکارهای دیگه باعث خواندن View ها یا جداول میشه . ولی در جدول Sysinedexes تمام جداول با تعداد رکوردهاشون موجوده که میتوان از آن استفاده کرد.

محمد سلیم آبادی
چهارشنبه 25 خرداد 1390, 03:14 صبح
بنابراین با قرض کوئری که آقای موسوی ارسال کردند همراه با کمی تغییرات بر اساس مشخصاتی که کاربر مطرح کردند و نیازی که داشتن راه حل به این شکل در اومد:
اگه احتمال این وجود داره جدولی بدون هیچگونه سطر باشه بایستی یک تابع اضافه بشه که Null را به صفر تغییر بده.

SELECT
MAX(CASE WHEN o.name = 'student' THEN i.rows END) AS stu,
MAX(CASE WHEN o.name = 'teacher' THEN i.rows END) AS tea,
MAX(CASE WHEN o.name = 'sabtnam' THEN i.rows END) AS sab,
MAX(CASE WHEN o.name = 'lesson' THEN i.rows END) AS les,
MAX(CASE WHEN o.name = 'class' THEN i.rows END) AS cla,
MAX(CASE WHEN o.name = 'user1' THEN i.rows END) AS us,
MAX(CASE WHEN o.name = 'year' THEN i.rows END) AS yea
FROM
sysobjects o,
sysindexes i
WHERE
o.xtype = 'U' AND i.id = OBJECT_ID(o.name) AND
o.name IN ('student', 'teacher', 'sabtnam', 'lesson', 'class', 'user1', 'year');