[ vlstefanovic @ 03.01.2006. 23:29 ] @
Recite mi neku agregatnu funkciju koja moze da radi na "bit" tipu kolone(bez akrobacija).
Hvala.
[ Zidar @ 04.01.2006. 14:16 ] @
SELECT
KolonaZaGrupisanje,
COUNT(bit_type_kolona) AS Brojac
FROM tvojaTabela
GROUP BY KolonaZaGrupisanje

MIN,MAX,STDEV nece da rade sa BIT tipovima, barem u verziji 2000.
[ vlstefanovic @ 05.01.2006. 10:57 ] @
OK. Ali nisam dobro postavio pitanje. Treba mi logička funkcija koja će mi npr. dati 0 ili 1 na osnovu vrednosti svih redova.
[ Zidar @ 05.01.2006. 13:30 ] @
Ne razumem pitanje. Sta u stvari pokusavas?
[ vlstefanovic @ 07.01.2006. 21:26 ] @
Jedna kolona su neke "flag" vrednosti. Hoću da vidim kada u određenom skupu redova imam bar jednu(ili sve) 0 ili 1.

Npr.:

tab1(int:kol1, bit:flag)

SELECT kol1, SUM(flag+0)-COUNT(*) rez
FROM tab1
GROUP BY kol1

onda ako je rez=0 tada su sve flag vrednosti 1, pa mi ovo SUM(... na neki način glumi logičko AND
Nije mi neophodno AND. Treba mi bilo koja logička funkcija.
[ Zidar @ 10.01.2006. 17:05 ] @
Ne znam sta znaci 'bez akrobacija', ali treba da pretvoris Bit u Int ili tinyInt. Upotrebi CAST ili CONVERT, otprilike ovako:
Code:
if not exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[tblRadnici]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
 BEGIN
CREATE TABLE [tblRadnici] (
    [Radnik_ID] [int] NOT NULL ,
    [ID_Odeljenje] [int] NOT NULL ,
    [Plata] [money] NOT NULL ,
    [BitPolje] [bit] NULL ,
    CONSTRAINT [PK_tblRadnici] PRIMARY KEY  CLUSTERED 
    (
        [Radnik_ID]
    ) WITH  FILLFACTOR = 90  ON [PRIMARY] 
) ON [PRIMARY]
END

GO



--- tabela tblradnici
SELECT * FROM tblRadnici

Radnik_ID   ID_Odeljenje Plata                 BitPolje 
----------- ------------ --------------------- -------- 
          1            1               12.0000        1 
          2            1               15.0000        0 
          3            1                8.0000        1 
          4            1               13.0000        0 
          5            2               16.0000        1 
          6            2               12.0000        1 
          7            2               15.0000        1 
          8            2               16.0000        1 
          9            3               12.0000        0 
         10            3               10.0000        0 
         11            3                5.0000        0 
         12            3                8.0000        0 

(12 row(s) affected)

--- Brojanje redova gde je VrednostBitPolja = 1
SELECT 
    ID_Odeljenje
    , SUM(CAST ([BitPolje] AS tinyint)) AS BrojJedinica
    , COUNT (*) AS BrojRedova
FROM tblRadnici
GROUP BY ID_Odeljenje

--- Moze i ovako:
SELECT 
    ID_Odeljenje
    , SUM(CAST ([BitPolje] AS tinyint)) AS BrojJedinica
    , COUNT (*) AS BrojRedova
    , Resultat = 
        CASE 
            WHEN
                SUM(CAST ([BitPolje] AS tinyint))= COUNT (*)
                    THEN 'Sve jedinice'
            WHEN
                SUM(CAST ([BitPolje] AS tinyint))= 0
                    THEN 'Sve nule'
            ELSE cast(SUM(CAST ([BitPolje] AS tinyint)) AS varchar)+' jedinica'
        END
FROM tblRadnici
GROUP BY ID_Odeljenje