PDA

View Full Version : رنکینگ بندی جدول



fakhravari
شنبه 19 اسفند 1391, 16:55 عصر
با سلام
من با این دستور مطالب خودم میگیرم و دسته بندی میکنم.
SELECT DISTINCT RecordsID,
(SELECT COUNT(Operations) AS Expr1
FROM SyncChangesTable
WHERE (RecordsID = sys1.RecordsID) AND (Operations = 'D')) AS D,
(SELECT COUNT(Operations) AS Expr1
FROM SyncChangesTable AS SyncChangesTable_3
WHERE (RecordsID = sys1.RecordsID) AND (Operations = 'I')) AS I,
(SELECT COUNT(Operations) AS Expr1
FROM SyncChangesTable AS SyncChangesTable_2
WHERE (RecordsID = sys1.RecordsID) AND (Operations = 'U')) AS U,
(SELECT TOP (1) TableName
FROM SyncChangesTable AS SyncChangesTable_1
WHERE (RecordsID = sys1.RecordsID)) AS TableName
FROM SyncChangesTable AS sys1

من میخواهم جدول بالا با جدول دوم مقایسه بشه و بر اساس نام جدول مرتب بشه.
لیست جداول در جدول دیگر است که تشکیل شده از 2 فیلد نام - ترتیب

جدول نهایی = جدول مرتب شده از روی نام جدول 2

Mahmoud.Afrad
شنبه 19 اسفند 1391, 18:18 عصر
میخواستم توی تاپیک قبلیتون بگم حالا اینجا میگم. وقتی نام جداول در جدول SyncListTable هست، در جدول SyncChangesTable به جای TableName آیدی جدول رو ذخیره کنید. در اینصورت جواب سوالتون هم اینه که حاصل کوئری رو براساس آیدی جدول مرتب کنید. برای نام جدول هم کافیه join کنید.

fakhravari
شنبه 19 اسفند 1391, 20:17 عصر
اسم جدول برای موارد دیگر میخواستم.
این تاپیک جدید سوال جدید من.
چطوری میتونم مرتب کنم.
اسم جدول برای همین جا میخواستم/.

veniz2008
شنبه 19 اسفند 1391, 20:21 عصر
من میخواهم جدول بالا با جدول دوم مقایسه بشه و بر اساس نام جدول مرتب بشه.
لیست جداول در جدول دیگر است که تشکیل شده از 2 فیلد نام - ترتیب

جدول نهایی = جدول مرتب شده از روی نام جدول 2
سلام.
این سوال یا خیلی ساده است یا منظور شما یه چیز دیگست.
خوب اگر در انتهای کوئری که گذاشتید و مربوط به جدول اول هست یه order by TableName بذارید، خروجی براساس نام جدول مرتب میشه.(این درست که TableName مربوط به جدول اول هست ولی به نظر میرسه نام های جدول 1 و جدول 2 یکسان هستن. بنابراین فرقی نمیکنه با نام جدول2 مقایسه بشه یا با جدول1). اگر منظورتون براساس position هست باز هم در این عکسی که شما گذاشتید براساس position هم وضع تغییر نمیکنه مگر اینکه چینش نام جدول و موقعیت تغییر کنه. مثلا 1 بشه Inbox و 2 بشه B_Forums و 3 هم B_Topics .

fakhravari
شنبه 19 اسفند 1391, 20:29 عصر
با سلام
اره از نظر چینش میخواهم.
چون در جدوا اول نمیتونیم عددی بدیم به مرتب سازی .
میخواهم بر اساس نام جدول و شماره مرتب بشه = دوتاش یکی
لیست اطلاعات در جدول اول بشه بر اساس زیر
مثلا 1 بشه Inbox و 2 بشه B_Forums و 3 هم B_Topics .

veniz2008
شنبه 19 اسفند 1391, 20:59 عصر
منظورتون اینطوریه ؟. کد زیر طبق چینش جدول ها در جدول 2، جدول 1 رو مرتب میکنه.

SELECT DISTINCT RecordsID,
(SELECT COUNT(Operations) AS Expr1
FROM SyncChangesTable
WHERE (RecordsID = sys1.RecordsID) AND (Operations = 'D')) AS D,
(SELECT COUNT(Operations) AS Expr1
FROM SyncChangesTable AS SyncChangesTable_3
WHERE (RecordsID = sys1.RecordsID) AND (Operations = 'I')) AS I,
(SELECT COUNT(Operations) AS Expr1
FROM SyncChangesTable AS SyncChangesTable_2
WHERE (RecordsID = sys1.RecordsID) AND (Operations = 'U')) AS U,
(SELECT TOP (1) sys1.TableName
FROM SyncChangesTable AS SyncChangesTable_1 inner join SyncListTable as sys2
on SyncChangesTable_1.TableName = sys2.TableName
WHERE (RecordsID = sys1.RecordsID)) AS TableName,
(SELECT TOP (1) sys2.Position
FROM SyncChangesTable AS SyncChangesTable_1 inner join SyncListTable as sys2
on SyncChangesTable_1.TableName = sys2.TableName
WHERE (RecordsID = sys1.RecordsID)) AS Position
FROM SyncChangesTable AS sys1 order by Position

Mahmoud.Afrad
یک شنبه 20 اسفند 1391, 01:53 صبح
اسم جدول برای موارد دیگر میخواستم.
این تاپیک جدید سوال جدید من.
چطوری میتونم مرتب کنم.
اسم جدول برای همین جا میخواستم/.
خب الان که جدول SyncListTable رو دارید، میتونید Position رو به جای نام حدول در SyncChangesTable (به عنوان کلید خارجی) درج کنید. در اینصورت کافیه براساس Position مرتب کنید.

ولی اگر اصرار دارید که ساختار جدول رو دست نزنید باید با جدول دوم join کنید:
نکته: برای سلکت نام جدول، کوئری نیاز نیست کافیه جلوی سلکت اسمشو بنویسید. RecordsID هم کلید اصلی پس نیازی به DISTINCT نیست.

;with t_cte (RecordID , TableName , Position , D , I , U )
as
(
SELECT RecordsID,
Synclisttable.TableName,
synclisttable.Position,
(SELECT COUNT(Operations)
FROM SyncChangesTable
WHERE (RecordsID = sys1.RecordsID) AND (Operations = 'D')
) AS D,
(SELECT COUNT(Operations)
FROM SyncChangesTable
WHERE (RecordsID = sys1.RecordsID) AND (Operations = 'I')
) AS I,
(SELECT COUNT(Operations)
FROM SyncChangesTable
WHERE (RecordsID = sys1.RecordsID) AND (Operations = 'U')
) AS U
FROM SyncChangesTable AS sys1
join SynclistTable
on sys1.TableName = synclisttable.TableName
)
select t_cte.RecordID ,
t_cte.D ,
t_cte.I ,
t_cte.U ,
t_cte.TableName
from t_cte
order by Position

fakhravari
دوشنبه 21 اسفند 1391, 01:56 صبح
با سلام
یه مشکلی که پیش میاد در این پستم گفتم
http://barnamenevis.org/showthread.php?387929-%DA%AF%D8%B1%D9%88%D9%87-%D8%A8%D9%86%D8%AF%DB%8C-%D8%A2%D9%85%D8%A7%D8%B1&p=1720163&viewfull=1#post1720163
گروه ایدی های جداول اگر مساوی بودن گروه بندی خراب میشن.

fakhravari
دوشنبه 21 اسفند 1391, 11:21 صبح
دست شما درد نکنه اقای حمیدرضاصادقیان (http://barnamenevis.org/member.php?4504-%D8%AD%D9%85%DB%8C%D8%AF%D8%B1%D8%B6%D8%A7%D8%B5%D 8%A7%D8%AF%D9%82%DB%8C%D8%A7%D9%86) فقط بلدین تاپیک حذف کنید.

fakhravari
دوشنبه 21 اسفند 1391, 12:00 عصر
کد من

with T
as
(
SELECT SyncChangesTable.TableName, SyncChangesTable.RecordValue, SyncListTable.Position
FROM SyncChangesTable INNER JOIN
SyncListTable ON SyncChangesTable.TableName = SyncListTable.TableName
GROUP BY SyncChangesTable.TableName, SyncChangesTable.RecordValue, SyncListTable.Position
)
select
TableName,
(SELECT top(1)RecordID FROM SyncChangesTable WHERE (RecordValue = T.RecordValue) and (TableName = T.TableName)) AS RecordID,
RecordValue,
(SELECT COUNT(Operations)FROM SyncChangesTable WHERE (RecordValue = T.RecordValue) AND (Operations = 'I')) AS I,
(SELECT COUNT(Operations)FROM SyncChangesTable WHERE (RecordValue = T.RecordValue) AND (Operations = 'U')) AS U,
(SELECT COUNT(Operations)FROM SyncChangesTable WHERE (RecordValue = T.RecordValue) AND (Operations = 'D')) AS D
from T
order by T.Position