group by in SQL

תאו

משתמש פעיל
D I G I T A L
איך אפשר לקבץ לפי מילה שנמצאת בשדה מסוים ,
לדוג' יש לי שדה שמכיל : אוטבוס , מודעה באוטבוס , מיניבוס , על האוטבוס ,
שיביא לי אוטבוס 3
מיניבוס 1
 

אפר

סתם מתעניין...
מנוי פרימיום
איך אפשר לקבץ לפי מילה שנמצאת בשדה מסוים ,
לדוג' יש לי שדה שמכיל : אוטבוס , מודעה באוטבוס , מיניבוס , על האוטבוס ,
שיביא לי אוטבוס 3
מיניבוס 1
מצו"ב דוגמא
 

קבצים מצורפים

  • דוגמא.zip
    KB 19.4 · צפיות: 20

אפר

סתם מתעניין...
מנוי פרימיום
תעתיק את העיקרון
 

אפר

סתם מתעניין...
מנוי פרימיום
תעתיק את העיקרון
SQL:
SELECT Count(טבלה1.מזהה) AS כמות, Switch([טבלה1].[ניסיון] ALike "%אוטובוס%","אוטובוס",[טבלה1].[ניסיון] ALike "%מיניבוס%","מיניבוס",[טבלה1].[ניסיון] ALike "%טנדר%","טנדר") AS מכיל
FROM טבלה1
GROUP BY Switch([טבלה1].[ניסיון] ALike "%אוטובוס%","אוטובוס",[טבלה1].[ניסיון] ALike "%מיניבוס%","מיניבוס",[טבלה1].[ניסיון] ALike "%טנדר%","טנדר");
 

חנה4

משתמש סופר מקצוען
D I G I T A L
תנסי להבין מכאן
declare @a table (s NVARCHAR(20))
insert into @b values(N'אוטובוס')

declare @b table (s NVARCHAR(20))

insert into @a values(N'אוטובוס')
insert into @a values(N'מודעה באוטובוס')
insert into @a values(N'מיניבוס')
insert into @a values(N'על האוטובוס')

SELECT b.s,count(*)
FROM @a a,@B B
WHERE a.s like N'%'+b.s+'%'
GROUP BY b.s
 

מתוכנתת

משתמש מקצוען
הנדסת תוכנה
אם ככה את יכולה לעשות את הסקריפט ש @חנה4 כתבה
ולעשות סקריפט נוסף שיכניס נתונים לטבלה b לפי מה שנדרש (או count >1 או כל מילה חוץ ממילים קישוריות - על, כמה וכו')
 

אפר

סתם מתעניין...
מנוי פרימיום
זה הבעיה אם היתי יודעת היתי מכניסה לטבלה ועושה עליה קיבוץ ...
אולי שיחפש מילה שחוזרת ע"ע כמה פעמים ?
אני הבנתי שזה מילים קבועות
הסקריפט המדובר לכאורה יהיה כבד ברשימות גדולות
 

חגי פאהן

משתמש סופר מקוצען
מנוי פרימיום
בוגר/תלמיד פרוג
עיצוב גרפי
עימוד ספרים
מה שהביאו מהאקסס נראה ב-sql של oracle כך:
SQL:
select case when instr(t.text, 'אוטבוס') > 0 then 'אוטבוס'
    when instr(t.text, 'מיניבוס') > 0 then 'מיניבוס' end,
    count(1)
from tablename t
group by case when instr(t.text, 'אוטבוס') > 0 then 'אוטבוס'
    when instr(t.text, 'מיניבוס') > 0 then 'מיניבוס' end
אבל אם זה כך אז לא צריך בכלל group by. אפשר כך:
SQL:
select sum(case when instr(t.text, 'אוטבוס') > 0 then 1 else 0 end) אוטבוס,
    sum(case when instr(t.text, 'מיניבוס') > 0 then 1 else 0 end) מיניבוס
from tablename t
ומחזיר אותה תוצאה.
 

תאו

משתמש פעיל
D I G I T A L
אבל אם זה כך אז לא צריך בכלל group by. אפשר כך:
SQL:
select sum(case when instr(t.text, 'אוטבוס') > 0 then 1 else 0 end) אוטבוס,
sum(case when instr(t.text, 'מיניבוס') > 0 then 1 else 0 end) מיניבוס
from tablename t
ומחזיר אותה תוצאה.

זה רק למקרה שהמילים הן קבועות וידועות מראש ...
 

אפר

סתם מתעניין...
מנוי פרימיום
מה שהביאו מהאקסס נראה ב-sql של oracle כך:
SQL:
select case when instr(t.text, 'אוטבוס') > 0 then 'אוטבוס'
    when instr(t.text, 'מיניבוס') > 0 then 'מיניבוס' end,
    count(1)
from tablename t
group by case when instr(t.text, 'אוטבוס') > 0 then 'אוטבוס'
    when instr(t.text, 'מיניבוס') > 0 then 'מיניבוס' end
אבל אם זה כך אז לא צריך בכלל group by. אפשר כך:
SQL:
select sum(case when instr(t.text, 'אוטבוס') > 0 then 1 else 0 end) אוטבוס,
    sum(case when instr(t.text, 'מיניבוס') > 0 then 1 else 0 end) מיניבוס
from tablename t
ומחזיר אותה תוצאה.
רק בעמודות ולא בטבלה
 

אפר

סתם מתעניין...
מנוי פרימיום
זה רק למקרה שהמילים הן קבועות וידועות מראש ...
אלא מה אתה מצפה שיספור כמה מילים מופיעות זה גם לא אפשרי כי לא יוכל להבדיל בין באוטובוס למאוטובוס וכדו'
 

qq

משתמש רשום
מה עם row_number ב partiton by, נראה לי יכול להתאים פה ?
 

אולי מעניין אותך גם...

הפרק היומי

הפרק היומי! כל ערב פרק תהילים חדש. הצטרפו אלינו לקריאת תהילים משותפת!


תהילים פרק קכח

א שִׁיר הַמַּעֲלוֹת אַשְׁרֵי כָּל יְרֵא יְהוָה הַהֹלֵךְ בִּדְרָכָיו:ב יְגִיעַ כַּפֶּיךָ כִּי תֹאכֵל אַשְׁרֶיךָ וְטוֹב לָךְ:ג אֶשְׁתְּךָ כְּגֶפֶן פֹּרִיָּה בְּיַרְכְּתֵי בֵיתֶךָ בָּנֶיךָ כִּשְׁתִלֵי זֵיתִים סָבִיב לְשֻׁלְחָנֶךָ:ד הִנֵּה כִי כֵן יְבֹרַךְ גָּבֶר יְרֵא יְהוָה:ה יְבָרֶכְךָ יְהוָה מִצִּיּוֹן וּרְאֵה בְּטוּב יְרוּשָׁלִָם כֹּל יְמֵי חַיֶּיךָ:ו וּרְאֵה בָנִים לְבָנֶיךָ שָׁלוֹם עַל יִשְׂרָאֵל:
נקרא  15  פעמים

לוח מודעות

למעלה