2010-11-19 26 views
5

SQL Server 2008'de küçük bir saklı yordam geliştiriyorum. SQL sorguları hakkında çok az bilgiye sahibim, ancak basit görevler elde etmek için yeterli. Ancak kendimi çözemediğim bir sorunla karşılaştım. Sorunumu açıklamaya başlamadan önce, bir SQL sorgusu yanlış yazıyorsam, lütfen bana ingilizce bir sözlü konuşmacı olmam konusunda özür dilerim. Ne yapmak istediğiniz grup positive when ANSWER = 1 ve negative when ANSWER = 0 adlı bir alandaki ID ve NAME, özetleyin o değerlerine göre seçimiyleBaşka bir alan değerine bağlı olarak bir alan nasıl toplanır?

ID, NAME, VALUES, ANSWER 
25, Tom , 2400 , 0     
25, Tom , 600 , 0     
25, Tom , 500 , 1     
25, Tom , 300 , 1     
27, Jerry, 100, 0     
27, Jerry, 20, 1     
27, Jerry, 60, 1     
27, Jerry, 2000, 0  

geçerli:

ben 4 alanları (CSV gösterimi) var.

ID, NAME, SUM, NEGATIVE, POSITIVE 
25, Tom, 3000, 800     
27, Jerry, 2100, 80 

sorum defalarca sorulmuş, ama yanlış terimler kullanıyorum muhtemelen çünkü bu konuda hiçbir şey bulmak mümkün değildi sanırım. Her neyse, birileri bana yardım ederse çok zaman kazandırabilir.

+0

http://stackoverflow.com/questions/30563/sql-returning-the-sum-of-items-depending-on-which-type-it-is – JNK

+0

+1, çünkü bu aslında oldukça iyi soru sordu. (Ayrıca editör sayesinde.) Basit, açıklayıcı giriş verileri var ve aslında istenen sonuç kümesini gösteriyor. – Matt

+0

Matt'e katılıyorum, bu iyi resimlendirilmiş bir soru ve amaç su kadar açık. Bu, ana dili İngilizce olmayanlar için çok yardımcı olur. =) –

cevap

4

Bunu bir CASE ifadesiyle yaparsınız.

+0

Değerleri – houlgap

+0

@houlgap ile seç ve gruptan kaldırmanız gerektiğini düşünüyorum: Soruyu anladığımdan emin olmak için üçüncü kez soruyu tekrar okuduktan sonra fark ettim. Bana haber verdiğiniz için teşekkürler, bu güzel! =) –

+0

@Ephismen: Bu, sorunuzu doğru cevaplıyor mu? İhtiyacını doğru anladım mı, yoksa bir şey özledim mi? –

2
Bunun gibi sütunlar ile SQL yeniden yazma

:

sum(case when answer=0 then values else 0 end) negative

1

Ephismen,

Eğer içinde gizli bir sorunu var vermek örnek. Her zaman en az bir pozitif ve bir negatifiniz olur mu? Sadece bir tane ya da diğeriniz varsa ve her ikisinde de olmazsa ne olmak istiyorsunuz? Her bir kimlik ve ad için birden çok satıra sahip olduğunuzda, tabloya kendiliğinden ekleme yapılmaz. SQL sunucusu için geçerliyse iki ayrı sorguları

A BİRLİĞİ bu sorulara cevap mümkün, ama emin değilim olacaktır 2008.

Sen şöyle SQL için fıkra tarafından grubunu kullanarak bunu başarmak mümkün olabilir :

select id 
    , name 
    , sum (neg_values) as negative 
    , sum (pos_values) as positive 
    from         -- temporary table 
    (select id 
      , name 
      , sum (values) as neg_values 
      , 0   as pos_values -- placeholder 
     from mytable 
     where answer = 0     -- negative 
     group by id 
       , name 
     union all 
     select id 
      , name 
      , 0   as neg_values -- placeholder 
      , sum (values) as pos_values 
     from mytable 
     where answer = 1     -- positive 
     group by id 
       , name 
    ) 
    group by id 
     , name 

geçici tablo (sendikayla seçkin iç) buna benzer satırlar döndürür:

id name neg_value pos_value 
25 tom  3000   0 
25 tom   0  800 
27 jerry  2100   0 
27 jerry  0  80 

nihai seçme istediğiniz resu dönecektir Onları (birlikte toplayarak).

+0

Benim durumumda her zaman her ikisi de olacak, böylece bunun için endişelenmem gerekmiyor, ama işaret ettiğin doğrudur. Bir gün bu problemle karşılaştığımda size cevap vereceğim ve bunu başkalarına yardımcı olabileceğinden + 1'leyeceğim. – Aymeric

İlgili konular