none
שאלת sytax בשאילתא RRS feed

  • שאלה

  • היי,

    אם אני רוצה לשלוף את הנתונים הבאים, לצורך הדוגמה:

    column1

    מספר הרשומות המכילות abc בעמודה column2

    מספר הרשומות המכילות def בעמודה column2

    האם ניתן לרשום כך?

    select column1, count(column2 where column2 = 'abc') as countABC, count(column2 where column2 = 'def') as countDEF from table1

    אם אני ממש טועה, אשמח ללמוד....

    יום שלישי 23 אוקטובר 2012 19:55

תשובות

  • היי נועם,

    1. בשאילתות שלך ניתן לציין (*)COUNT ולא COUNT על הטור כי הפילטר שלך כבר מפלטר החוצה את כל ה NULL.

    2. אפשר לעשות את זה בשאילתא אחת.

    הנה דוגמא על AdvnetureWorks2012:

    SELECT	COUNT(CASE WHEN CLASS = N'M' THEN 1 ELSE NULL END) AS Number_Of_Ms,
    	COUNT(CASE WHEN CLASS = N'L' THEN 1 ELSE NULL END) AS Number_Of_Ls
    FROM	Production.Product
    WHERE	CLASS IN (N'L',N'M')


    Ami Levin, SQL Server MVP. CTO, DBSophic LTD. - http://www.dbsophic.com/ --Performance is the most significant driver in maintaining data and service availability.--

    • הוצע כתשובה על-ידי Ivan Radchenko יום רביעי 24 אוקטובר 2012 06:04
    • סומן כתשובה על-ידי pituachMVP, Editor שבת 27 אוקטובר 2012 14:13
    יום רביעי 24 אוקטובר 2012 05:25

כל התגובות

  • שלום,

    השאילתה שרשמת לא תעבוד.

    למיטב ידיעתי 2 תנאים שונים מצריכים 2 שאילתות במקרה זה

    SELECT count(column1) FROM dbo.Table_1 WHERE column1='abc'

    SELECT count(column2) FROM dbo.Table_1 WHERE column2='def'


    מקווה שעזרתי,
    נועם

    יום שלישי 23 אוקטובר 2012 20:52
  • היי מור.

    מהו פלט הרצוי של השאילתא? אם הבנתי נכון, זה אמור להיות משהו כזה:

    column1        countABC    countDEF

    a                    4                    5 

    b                     4                    5

    c                     4                    5

    יום רביעי 24 אוקטובר 2012 05:21
  • היי נועם,

    1. בשאילתות שלך ניתן לציין (*)COUNT ולא COUNT על הטור כי הפילטר שלך כבר מפלטר החוצה את כל ה NULL.

    2. אפשר לעשות את זה בשאילתא אחת.

    הנה דוגמא על AdvnetureWorks2012:

    SELECT	COUNT(CASE WHEN CLASS = N'M' THEN 1 ELSE NULL END) AS Number_Of_Ms,
    	COUNT(CASE WHEN CLASS = N'L' THEN 1 ELSE NULL END) AS Number_Of_Ls
    FROM	Production.Product
    WHERE	CLASS IN (N'L',N'M')


    Ami Levin, SQL Server MVP. CTO, DBSophic LTD. - http://www.dbsophic.com/ --Performance is the most significant driver in maintaining data and service availability.--

    • הוצע כתשובה על-ידי Ivan Radchenko יום רביעי 24 אוקטובר 2012 06:04
    • סומן כתשובה על-ידי pituachMVP, Editor שבת 27 אוקטובר 2012 14:13
    יום רביעי 24 אוקטובר 2012 05:25
  • תודה עמי,

    זאת אומרת שאם אני "מתרגם" את השאילתא למקרה שלנו למעלה אני מקבל את השאילתה הזאת:

    SELECT	COUNT(CASE WHEN column1 = N'abc' THEN 1 ELSE NULL END) AS Number_Of_abcs,
    COUNT(CASE WHEN column2 = N'def' THEN 1 ELSE NULL END) AS Number_Of_defs
    FROM	dbo.table_1
    WHERE	column1 IN (N'abc',N'def') or column2 IN (N'abc',N'def')

    תודה,
    נועם

    יום רביעי 24 אוקטובר 2012 11:00
  • נועם,

    לדעתי התרגום שלך לא מדוייק. כדאי לחכות לפלט צפוי ממור, אבל בכל זאת אציע את "התרגום" שלי:

    SELECT column1, COUNT(CASE WHEN column2 = N'abc' THEN 1 ELSE NULL END) AS CountABC, COUNT(CASE WHEN column2 = N'def' THEN 1 ELSE NULL END) AS CountDEF FROM dbo.table1 WHERE column2 IN (N'abc',N'def')


    יום רביעי 24 אוקטובר 2012 12:41