الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

اريد وضع Column في داخل جملة Select بدون ان اضع هذا Column داخل Group By

بدأه sharks في 25 ديسمبر 2008 · 16 رد · 1,600 مشاهدة · في قواعد بيانات Microsoft SQL Server
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

لي سؤال

اريد وضع column في داخل جملة select بدون ان اضع هذا column داخل Group By

مثال

(select column1,column2,Max(column3

from Table1

join Table2

on Table1.column1=Table2.column1

Group By column2

having---------

هذا مثال يبين اني اريد ان اضع column1 داخل select ولكن بدون ان اضعها داخل Group By وتلاحظون ان column1 غير موجود داخل Group By

طبعا يحدث خطا داخل sql

فما الحل انا اريد ان اظهر هذا العمود(column1)

شكرا للجميع

#2

ملحوظة اخرى

عندما اضع column1 داخل Group By لا يحدث خطا في sql ولكن لا يرجع لي النتائج كما اريدها

انا اريد اقصى اكبر عدد في column2 ولكن اريد اظهار العمود column1 ايضا للان به ID الصف

وشكرا

#3

رجاء لو تضع شرح أكثر للمطلوب ويكون مدعم بنموذج من البيانات الموجودة ونموذج من البيانات المراد ظهورها

من أقوال الأئمة

الإمام علي بن أبي طالب -رضي الله عنه-: "الناس ثلاثة : فعالم رباني ، ومتعلم على سبيل النجاة ، وهمج رِعاع غوغاء أتباع كل ناعق ، يميلون مع كل ريح ، لم يستضيئوا بنور العلم ، ولم يلجئوا إلى ركن وثيق".

الإمام مالك -رحمه الله- : " لن يصلح آخر هذه الأمة إلا بما أصلح به أولها ".

الإمام الأوزاعي -رحمه الله- : " عليك بآثار من سلف وإن رفضك الناس وإياك وآراء الرجال وإن زخرفوه لك بالقول ".

الإمام الفضيل بن عياض -رحمه الله- : " عليك بطرق الهدى و لا يضرك قلة السالكين و إياك و طرق الضلالة ولا يغرك كثرة الهالكين ".

علامة الزمان الإمام الألباني -رحمه الله- : " إن الخلاص إلى أيدي هؤلاء الشباب يتمثل في أمرين لا ثالث لهما ؛ التصفية والتربية ".

وكل خير في اتباع من سلف وكل شر في ابتداع من خلف

#4

فى حالة عمل groupBy لابد أن تكون البيانات المراد تجميعها قابلة للتجميع

أرجو أن تكون قد وضحت الفكرة

لا إله إلا الله محمد رسول الله

アッラー以外に神はなし。ムハンマドはアッラーの使徒である

#5

حياك الله اخي الفاضل

select column1,column2,Max(column3

from Table1

join Table2

on Table1.column1=Table2.column1

Group By column2

انا اريد ان اظهر اكبر رقم داخل هذا العمود column3ولكن واريد ان اظهر عمود column1 المشكلة انه عندما اضع عمود column1 داخل جملة select ياتي بنتائج خطا

النتائج هي

column1 column2 column3

1 3 1

3 3 2

4 3 3

انا اريد ان اظهر اخر صف فقط للان به اكبر رقم في العمود3 column3 ولا اريد ان اظهر باقي الصفوف التى في الاعلى

اريد هذه النتيجة

column1 column2 column3

4 3 3

اتمنى ان اكوم اوضحت ما اريد

حياك الله اخي الفاضل

select column1,column2,Max(column3

from Table1

join Table2

on Table1.column1=Table2.column1

Group By column2

انا اريد ان اظهر اكبر رقم داخل هذا العمود column3ولكن واريد ان اظهر عمود column1 المشكلة انه عندما اضع عمود column1 داخل جملة select ياتي بنتائج خطا

النتائج هي

column1 column2 column3

--1 -------------3-------- 1

--3 --------------3-------- 2

--4-------------- 3-------- 3

انا اريد ان اظهر اخر صف فقط للان به اكبر رقم في العمود3 column3 ولا اريد ان اظهر باقي الصفوف التى في الاعلى

اريد هذه النتيجة

column1 column2 column3

--4 -------------3----------- 3

اتمنى ان اكوم اوضحت ما اريد

#7

select * from Table1 join Table2 on Table1.column1=Table2.column1

where column3 = (select max(column3) from Table1)

من أقوال الأئمة

الإمام علي بن أبي طالب -رضي الله عنه-: "الناس ثلاثة : فعالم رباني ، ومتعلم على سبيل النجاة ، وهمج رِعاع غوغاء أتباع كل ناعق ، يميلون مع كل ريح ، لم يستضيئوا بنور العلم ، ولم يلجئوا إلى ركن وثيق".

الإمام مالك -رحمه الله- : " لن يصلح آخر هذه الأمة إلا بما أصلح به أولها ".

الإمام الأوزاعي -رحمه الله- : " عليك بآثار من سلف وإن رفضك الناس وإياك وآراء الرجال وإن زخرفوه لك بالقول ".

الإمام الفضيل بن عياض -رحمه الله- : " عليك بطرق الهدى و لا يضرك قلة السالكين و إياك و طرق الضلالة ولا يغرك كثرة الهالكين ".

علامة الزمان الإمام الألباني -رحمه الله- : " إن الخلاص إلى أيدي هؤلاء الشباب يتمثل في أمرين لا ثالث لهما ؛ التصفية والتربية ".

وكل خير في اتباع من سلف وكل شر في ابتداع من خلف

#8

لا أظن أنك بحاجة إلى أن تستخدم groupBy

قم بعمل

اقتباس
SELECT TOP(1)* FROM SYS.sysmessages order by ERROR

هنا سوف تأتى بالأعلى قيمة دون الحاجة لللجوء إلى GROUP BY

لا إله إلا الله محمد رسول الله

アッラー以外に神はなし。ムハンマドはアッラーの使徒である

#9

نسيت شئ

يجب أن يكون الترتيب DESC تنازلى و ليس تصاعدى

تم تعديل هذه المشاركة بواسطة نور (محمد نور) في 26 ديسمبر 2008 في 01:14

لا إله إلا الله محمد رسول الله

アッラー以外に神はなし。ムハンマドはアッラーの使徒である

#10

جملة order by هذه مكلفة من ناحية الـ performance ولا داعي لترتيب البيانات كلها من أجل اختيار أول عنصر فقط فدرجة تعقيد خوارزميتك

mimetex.cgi?nlogn

أما خوارزميتي فدرجة تعقيدها n فقط

وعندي سؤال للأخ sharks ماذا لو كان القيمة العظمى للعمود الثالث متكررة يعني أن تكون أكبر قيمة موجودة في أكثر من صف هل تريد أن تظهر كل هذه الصفوف أم صف واحد منها فقط

من أقوال الأئمة

الإمام علي بن أبي طالب -رضي الله عنه-: "الناس ثلاثة : فعالم رباني ، ومتعلم على سبيل النجاة ، وهمج رِعاع غوغاء أتباع كل ناعق ، يميلون مع كل ريح ، لم يستضيئوا بنور العلم ، ولم يلجئوا إلى ركن وثيق".

الإمام مالك -رحمه الله- : " لن يصلح آخر هذه الأمة إلا بما أصلح به أولها ".

الإمام الأوزاعي -رحمه الله- : " عليك بآثار من سلف وإن رفضك الناس وإياك وآراء الرجال وإن زخرفوه لك بالقول ".

الإمام الفضيل بن عياض -رحمه الله- : " عليك بطرق الهدى و لا يضرك قلة السالكين و إياك و طرق الضلالة ولا يغرك كثرة الهالكين ".

علامة الزمان الإمام الألباني -رحمه الله- : " إن الخلاص إلى أيدي هؤلاء الشباب يتمثل في أمرين لا ثالث لهما ؛ التصفية والتربية ".

وكل خير في اتباع من سلف وكل شر في ابتداع من خلف

#11
باسم الموجي كتب:
جملة order by هذه مكلفة من ناحية الـ performance ولا داعي لترتيب البيانات كلها من أجل اختيار أول عنصر فقط فدرجة تعقيد خوارزميتك

:lol: أن جملتك هى الأخرى خوارزميتها :

mimetex.cgi?n log n

لا إله إلا الله محمد رسول الله

アッラー以外に神はなし。ムハンマドはアッラーの使徒である

#12

حياكم الله جميعا

اقتباس
وعندي سؤال للأخ sharks ماذا لو كان القيمة العظمى للعمود الثالث متكررة يعني أن تكون أكبر قيمة موجودة في أكثر من صف هل تريد أن تظهر كل هذه الصفوف أم صف واحد منها فقط

هذا هو ما اريد هناك اكثر من صف له قيم عظمى متشابهه ما اريده هو ان ارتب هذه القيم على حسب column2 مع اظهار رقم ID في العمود column1

اعتقد اني اوضحت يا اخي

#13

ساوضح اكثر بمثال

column1 column2 column3

--1 -------------3-------- 1

--3 --------------3-------- 2

--4-------------- 3-------- 3

--3 --------------4-------- 4

--4-------------- 4-------- 5

النتيجة التي اريدها هي

column1 column2 column3

--4-------------- 3-------- 3

--4-------------- 4-------- 5

اريد اظهار هذه النتيجة طبعا على حسب column2 طبعا يجب ان استخدم group by ولكن المشكلة هي في column1 عندما اضع هذا العمود في جمله selectوفي يظهر له كل بيانات الصفوف الكبيرة والصغيره وانا لا اريد هذا وايضا اريد اظهار column1

شكرا للجميع

#14
select * from Table1 join Table2 on Table1.column1=Table2.column1
where column3 = (select max(column3) from Table1) order by column2

سيكون الكود هكذا

وبالنسبة لكلام الأخ نور فكلامك خطأ تماما لأن ايجاد القيمة العظمى لا يحتاج إلى ترتيب البيانات أصلا وهذه خوارزمية مختلفة تماما عن خوارزمية الترتيب

من أقوال الأئمة

الإمام علي بن أبي طالب -رضي الله عنه-: "الناس ثلاثة : فعالم رباني ، ومتعلم على سبيل النجاة ، وهمج رِعاع غوغاء أتباع كل ناعق ، يميلون مع كل ريح ، لم يستضيئوا بنور العلم ، ولم يلجئوا إلى ركن وثيق".

الإمام مالك -رحمه الله- : " لن يصلح آخر هذه الأمة إلا بما أصلح به أولها ".

الإمام الأوزاعي -رحمه الله- : " عليك بآثار من سلف وإن رفضك الناس وإياك وآراء الرجال وإن زخرفوه لك بالقول ".

الإمام الفضيل بن عياض -رحمه الله- : " عليك بطرق الهدى و لا يضرك قلة السالكين و إياك و طرق الضلالة ولا يغرك كثرة الهالكين ".

علامة الزمان الإمام الألباني -رحمه الله- : " إن الخلاص إلى أيدي هؤلاء الشباب يتمثل في أمرين لا ثالث لهما ؛ التصفية والتربية ".

وكل خير في اتباع من سلف وكل شر في ابتداع من خلف

#15

برحاتك

عموما أنا لى نظرة أخرى فى هذا الأمر

فبالتجربة العملية على عينة بحجم كبير أثبتت أنه لا فارق

عموما لا عليك

تم تعديل هذه المشاركة بواسطة نور (محمد نور) في 26 ديسمبر 2008 في 19:47

لا إله إلا الله محمد رسول الله

アッラー以外に神はなし。ムハンマドはアッラーの使徒である

#16
اقتباس
select * from Table1 join Table2 on Table1.column1=Table2.column1

where column3 = (select max(column3) from Table1) order by column2

هذا الكود يخرج لي صف واحد فقط

النتيجة التي اريدها صفين على اساس column2

ساوضح اكثر بمثال

column1 column2 column3

--1 -------------3-------- 1

--3 --------------3-------- 2

--4-------------- 3-------- 3

--3 --------------4-------- 4

--4-------------- 4-------- 5

النتيجة التي اريدها هي

column1 column2 column3

--4-------------- 3-------- 3

--4-------------- 4-------- 5

هذه النتيجة على اساس column2

هذا الكود الذي توصلت اليه ولكن لابد ان اضع العمود Test.ID في داخل جمله select وعندما اضع هذا العمود فانه يخرج لي جميع الصفوف التي اريدها والتي لا اريدها المشكله تنحل عندما احذف هذا العمود من الكود ولكن هكذا لن يظهر لي رقم ID وانا اريد ان يظهر

SELECT Test.ID, MAX(dbo.Test.SessionID) AS Number, dbo.Dayes.DayName, dbo.Grade.GradeName

FROM dbo.Test INNER JOIN

dbo.Dayes ON dbo.Test.DayID = dbo.Dayes.DayID INNER JOIN

dbo.Stage INNER JOIN

dbo.Grade ON dbo.Stage.StageID = dbo.Grade.StageID ON dbo.Test.GradeID = dbo.Grade.GradeID INNER JOIN

dbo.Sessions ON dbo.Test.SessionID = dbo.Sessions.SessionID

GROUP BY dbo.Dayes.DayName, dbo.Test.GradeID,Test.ID, dbo.Grade.GradeName

HAVING (dbo.Test.GradeID = 2)

#17

أخي هل جربت الكود أصلا ؟!!!

أنا متأكد من أن الكود سيعطي أكثر من صف وقد جربت ذلك بنفسي ؟!!!

من أقوال الأئمة

الإمام علي بن أبي طالب -رضي الله عنه-: "الناس ثلاثة : فعالم رباني ، ومتعلم على سبيل النجاة ، وهمج رِعاع غوغاء أتباع كل ناعق ، يميلون مع كل ريح ، لم يستضيئوا بنور العلم ، ولم يلجئوا إلى ركن وثيق".

الإمام مالك -رحمه الله- : " لن يصلح آخر هذه الأمة إلا بما أصلح به أولها ".

الإمام الأوزاعي -رحمه الله- : " عليك بآثار من سلف وإن رفضك الناس وإياك وآراء الرجال وإن زخرفوه لك بالقول ".

الإمام الفضيل بن عياض -رحمه الله- : " عليك بطرق الهدى و لا يضرك قلة السالكين و إياك و طرق الضلالة ولا يغرك كثرة الهالكين ".

علامة الزمان الإمام الألباني -رحمه الله- : " إن الخلاص إلى أيدي هؤلاء الشباب يتمثل في أمرين لا ثالث لهما ؛ التصفية والتربية ".

وكل خير في اتباع من سلف وكل شر في ابتداع من خلف

مواضيع مشابهة