2016-03-21 30 views
0

Seçtiğim sorgular, kaldırdığım t0.brandID = null değil, yalnızca bir tablodaki sorgunun sonucunu almanız gerekir.tek bir tabloda iki sorgunun sonuçlarını gösterme

brandid brandname cdt    udt brandstatus addedby branid_average brandid_min brandid_max branid_count 
    8 budwieser 2013-11-14  2014-02-12 1 8   46    8    92    7 
    18 budwieser 2013-11-15  2013-11-15 1 1   null   null   null   null 
    ........................................................  null   null   null   null 
    --------------------------------------------------------  null   null   null   null 
:

brandid brandname  cdt      udt  brandstatus added by 

    8 budwieser 2013-11-14 16:26:43.913 2014-02-12 19:26:43.913 1 8 
    18 budwieser 2013-11-15 19:14:18.123 2013-11-15 19:14:18.123 1 1 
    23 budwieser 2013-11-15 19:14:18.123 2013-11-15 19:14:18.123 1 1 
    37 budwieser 2013-11-15 19:14:18.123 2013-11-15 19:14:18.123 1 1 
    63 budwieser 2013-11-15 19:14:18.123 2013-11-15 19:14:18.123 1 1 
    82 budwieser 2013-11-15 19:14:18.123 2013-11-15 19:14:18.123 1 1 
    92 budwieser 2013-11-15 19:14:18.123 2013-11-15 19:14:18.123 1 1 

ve

brandid_average brandid_min brandid_max brandid_count 
46    8    92    7 

Ben aşağıda sonucu göstermek istiyorum:

SELECT 
    t0.brandID, t0.brandName, t0.cdt, t0.udt, t0.brandstatus, t0.AddedBy 
FROM 
    brands t0 
WHERE 
    t0.brandName = 'budwieser' 

SELECT 
    AVG(CAST (brandID AS bigint)) AS brandID_AVERAGE, 
    MIN(CAST (brandID AS bigint)) as branid_min, 
    MAX(CAST (brandID AS bigint)) as brandid_max, 
    COUNT(CAST (brandID AS bigint)) as brandid_count 
FROM 
    (SELECT 
     t0.brandID, t0.brandName, t0.cdt, t0.udt, t0.brandstatus, t0.AddedBy 
    FROM 
     brands t0 
    WHERE 
     t0.brandID = null OR t0.brandName = 'budwieser') temptable 

yukarıdaki sorgunun sonucu resmin altındaki gibi iki farklı tablolarda olduğu

+0

- Kullanmak için gereken' to.BrandID 'NULL' (kullanım IS NULL 'veya NULL değil' - null 'değil. –

+0

Beklenen çıktınızın neden 8 Budweiser kaydı için hesaplanmış değerlere sahip olduğunu açıklayabilir misiniz? Sorunuzu okumak, tüm Budweiser kayıtlarında aynı değerleri bekledim. 2 sorgunun sonuçlarını nasıl ilişkilendirmek/eşleştirmek istiyorsunuz? –

+0

teşekkürler, seçilen kayıtların ortalama, minimum, maksimum sayısını hesaplamam gerekiyor. Benim masamda branidlerin (8, 18, 23, ..., 92) sandwuper girişleri var. (8 + 18 + 23 + ..)/7 = 46.07 - 46. 8, seçilen kayıtların en fazla marka değeri 92'dir ve kayıt sayısı 7'dir. Bu değerleri branid, marka adı, .., brandid_average, branid_min, brandid_max, brandid_count değerleriyle birlikte göstermek zorundayım. Bu test senaryosudur, gerçek kullanım, farklı invertörlerde voltaj hesaplamak için olacaktır. Bu rapor excel olarak ihraç edilecek. – Tan

cevap

0

İki tabloda bu senaryoda sonuçların birleştirilmesi gerekir, hem tablolardan seçim yaparak basit yapılabilir. , örneğin tablo1, tablo2.

Table1 has columns id,name,age 
table2 has columns someid,group,gender 
aşağıda biçimini göstermek için sonuç için

basit sorgu geçerli: Benzer yukarıdaki soru için

select t1.*,t2.* from table1 t1,table2 t2 

id name age someid group gender 
1 one 1 10  5  M 

biz bir tablo beyan ve değerleri kaydetmek zorunda var hiçbir fiziksel tablo olmadığı için geçici tablo ve sonra sadece soru olarak istediğiniz sonucu döndürecek tabloları seçin.

 drop table #mytemptable --- droping the temporary table if exists 
//select query 
     select AVG(CAST (brandID AS bigint)) AS brandID_AVERAGE, 
     min(CAST (brandID AS bigint)) as branid_min, 
     MAX(CAST (brandID AS bigint)) as brandid_max, 
     COUNT(CAST (brandID AS bigint)) as brandid_count 
into #mytemptable ---//Here inserting the selected values from below query to temporary table 
    from 
     (SELECT t0.brandID, t0.brandName, t0.cdt, t0.udt, t0.brandstatus, t0.AddedBy 

     FROM brands t0 
     Where t0. brandID=null OR t0. brandName='budwieser' 

     ) temptable 
     //simple select from both tables 
     SELECT t0.brandID, t0.brandName, t0.cdt, t0.udt, t0.brandstatus, t0.AddedBy ,t2.* 
     from brands t0,#mytemptable t2 
     where t0.brandName='budwieser' 

beklenen sonuç olacaktır:

Düzenli eşitlik operatörünü kullanarak NULL` `kontrol edemez
brandID brandName cdt udt brandstatus AddedBy brandID_AVERAGE branid_min brandid_max brandid_count 
8 budwieser 2013-11-14 16:26:43.913 2014-02-12 19:26:43.913 1 8 46 8 92 7 
18 budwieser 2013-11-15 19:14:18.123 2013-11-15 19:14:18.123 1 1 46 8 92 7 
23 budwieser 2013-11-15 19:14:18.123 2013-11-15 19:14:18.123 1 1 46 8 92 7 
37 budwieser 2013-11-15 19:14:18.123 2013-11-15 19:14:18.123 1 1 46 8 92 7 
63 budwieser 2013-11-15 19:14:18.123 2013-11-15 19:14:18.123 1 1 46 8 92 7 
82 budwieser 2013-11-15 19:14:18.123 2013-11-15 19:14:18.123 1 1 46 8 92 7 
92 budwieser 2013-11-15 19:14:18.123 2013-11-15 19:14:18.123 1 1 46 8 92 7 
0
SELECT t0.brandID, 
     t0.brandName, 
     t0.cdt, 
     t0.udt, 
     t0.brandstatus, 
     t0.AddedBy, 
     AVG(CAST(brandID AS BIGINT)) OVER(PARTITION BY t0.brandName) AS brandID_AVERAGE, 
     MIN(CAST(brandID AS BIGINT)) OVER(PARTITION BY t0.brandName) AS branid_min, 
     MAX(CAST(brandID AS BIGINT)) OVER(PARTITION BY t0.brandName) AS brandid_max, 
     COUNT(CAST(brandID AS BIGINT)) OVER(PARTITION BY t0.brandName) AS brandid_count 
FROM brands t0 
WHERE t0.brandName = 'budwieser' 
+0

"t0.brandname = 'budwieser'" yerine "t0.cdt> =" 2013-11-14 "ve t0.cdt <= '2013-11-15' yerine iki tarih arasında seçim yaparsam brandid_average'ı her zaman kendi branid, brandid_min olarak brandid, brandid_max'ı brandid olarak verin, brandid_count daima yanlış olan 1 olacaktır. Eğer yukarıda verilen cevabı kontrol ederseniz yukarıdaki maddeyi değiştirirseniz avg, min, max ve sayımın mükemmel bir sonucunu elde edersiniz. bu sadece sizin bilgiiniz için katılıyorum umuyoruz, yanılıyorsam lütfen beni düzeltin – Tan

İlgili konular