• I'm sorry, something is going on with the forum which won't publish your posts immediately. I guess that it has to do with the spam filter and your posts might be visible eventually (I can see them in the reply page).

    Here's a solution using a gaps and islands technique which has a good performance, although it's not the best.

    CREATE TABLE mytable(

    Vendor INT

    , Item INT

    , StatusDate DATE

    , PassDate DATE

    , Faildate DATE

    );

    INSERT INTO mytable(Vendor,Item,StatusDate,PassDate,Faildate) VALUES (100,5632,'5/9/2010','5/9/2010',NULL);

    INSERT INTO mytable(Vendor,Item,StatusDate,PassDate,Faildate) VALUES (100,5632,'12/15/2012','12/15/2012',NULL);

    INSERT INTO mytable(Vendor,Item,StatusDate,PassDate,Faildate) VALUES (100,5632,'5/25/2013','5/25/2013',NULL);

    INSERT INTO mytable(Vendor,Item,StatusDate,PassDate,Faildate) VALUES (100,5632,'11/17/2014','11/17/2014',NULL);

    INSERT INTO mytable(Vendor,Item,StatusDate,PassDate,Faildate) VALUES (100,6894,'1/5/2010','1/5/2010',NULL);

    INSERT INTO mytable(Vendor,Item,StatusDate,PassDate,Faildate) VALUES (100,6894,'5/6/2011','5/6/2011',NULL);

    INSERT INTO mytable(Vendor,Item,StatusDate,PassDate,Faildate) VALUES (100,6894,'8/9/2012','8/9/2012',NULL);

    INSERT INTO mytable(Vendor,Item,StatusDate,PassDate,Faildate) VALUES (100,6894,'6/19/2013','6/19/2013',NULL);

    INSERT INTO mytable(Vendor,Item,StatusDate,PassDate,Faildate) VALUES (100,6894,'5/9/2014',NULL,'5/9/2014');

    INSERT INTO mytable(Vendor,Item,StatusDate,PassDate,Faildate) VALUES (100,6894,'9/18/2014','9/18/2014',NULL);

    INSERT INTO mytable(Vendor,Item,StatusDate,PassDate,Faildate) VALUES (100,6894,'5/12/2015','5/12/2015',NULL);

    INSERT INTO mytable(Vendor,Item,StatusDate,PassDate,Faildate) VALUES (200,2589,'5/9/2010','5/9/2010',NULL);

    INSERT INTO mytable(Vendor,Item,StatusDate,PassDate,Faildate) VALUES (200,2589,'12/15/2012','12/15/2012',NULL);

    INSERT INTO mytable(Vendor,Item,StatusDate,PassDate,Faildate) VALUES (200,2589,'5/25/2013','5/25/2013',NULL);

    INSERT INTO mytable(Vendor,Item,StatusDate,PassDate,Faildate) VALUES (200,2589,'11/17/2014',NULL,'11/17/2014');

    INSERT INTO mytable(Vendor,Item,StatusDate,PassDate,Faildate) VALUES (200,9865,'1/5/2010','1/5/2010',NULL);

    INSERT INTO mytable(Vendor,Item,StatusDate,PassDate,Faildate) VALUES (200,9865,'5/6/2011',NULL,'5/6/2011');

    INSERT INTO mytable(Vendor,Item,StatusDate,PassDate,Faildate) VALUES (200,9865,'8/9/2012','8/9/2012',NULL);

    INSERT INTO mytable(Vendor,Item,StatusDate,PassDate,Faildate) VALUES (200,9865,'6/19/2013','6/19/2013',NULL);

    INSERT INTO mytable(Vendor,Item,StatusDate,PassDate,Faildate) VALUES (200,9865,'5/9/2014','5/9/2014',NULL);

    INSERT INTO mytable(Vendor,Item,StatusDate,PassDate,Faildate) VALUES (200,9865,'9/18/2014','9/18/2014',NULL);

    INSERT INTO mytable(Vendor,Item,StatusDate,PassDate,Faildate) VALUES (200,9865,'5/12/2015','5/12/2015',NULL);

    WITH CTE AS(

    SELECT *,

    ROW_NUMBER() OVER(PARTITION BY Vendor, Item ORDER BY StatusDate) -

    ROW_NUMBER() OVER(PARTITION BY Vendor, Item, FailDate ORDER BY StatusDate) AS grouper

    FROM mytable

    )

    SELECT Vendor,

    Item,

    StatusDate,

    PassDate,

    Faildate,

    CASE WHEN PassDate IS NULL THEN 0

    ELSE ROW_NUMBER() OVER(PARTITION BY Vendor, Item, Grouper, FailDate ORDER BY StatusDate) END AS Count

    FROM CTE

    ORDER BY Vendor, Item, StatusDate;

    GO

    DROP TABLE mytable;

    Luis C.
    General Disclaimer:
    Are you seriously taking the advice and code from someone from the internet without testing it? Do you at least understand it? Or can it easily kill your server?

    How to post data/code on a forum to get the best help: Option 1 / Option 2