Query to delete rows

I have a tabled defined as:

create table #YearlyTreatmentData(
 
  TreatmentYear int,
  EyeId nvarchar(18),
  TreatedWith nvarchar(30),
  TreatmentCount int );

Open in new window


The table holds the yearly treatment details for a patients with the type of treatment as TreatedWith, and the number of times treated that year with the treatment as TreatmentCount.

EyeId is a patient id.

I need a Query that will delete all the rows where a patient(EyeId) has been treated by anything other than the specific treatment i am interested in.

If i am looking for patients treated with PDT then i want to keep the patients that have ONLY been treated with PDT. The rest must be deleted.

Patients treated with something else, or patients that have been treated with PDT and something else must be deleted from the table.

I guess (using logic from my previous question) i must delete patients where the sum of all their treatments does not equal the sum of their treatments with PDT i.e. the patients that have changed treatment.

And then also delete every row that is not PDT i.e. the patients treated with something else-

Just dont know how to express this as a delete statement.

Thanks
soozhAsked:
Who is Participating?

Improve company productivity with a Business Account.Sign Up

x
 
didnthaveanameConnect With a Mentor Commented:
Is there only one treatedWith value per entry (will there be multiple rows with the same eyeID if they were treated with something else ) ?

Edit:

If yes, I think the following would work:

delete from YTD
from
   #YearlyTreatmentData as YTD
      left join #YearlyTreatmentData as YTDO on YTD.eyeID = YTDO.eyeID and YTDO.treatedWith <> YTD.treatedWith
   where
      YTDO.eyeID is not null or
      YTD.treatedWith <> N'PDT'; 

Open in new window


(if you have any sample data, that would be quite helpful for testing =))

Edit of Edit:

I changed the query to remove an extraneous filter.
0
 
Bhavesh ShahLead AnalysistCommented:
you mean to say this


delete from #table1
where TreatedWith <> 'PDT'
0
 
didnthaveanameCommented:
delete from #YearlyTreatmentData
where
   treatedwith <> N'PDT';
0
Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.

 
didnthaveanameCommented:
As a completely unrelated to the answer question, why don't you filter the inserts into the temp table based on the treatedwith column?
0
 
soozhAuthor Commented:
no that is not the answer!

Ofcourse i know how to delete patients that dont have PDT!

I need to delete patients that have PDT + something else, and all those that only have something else.

Your solution only deletes the second group - patients who have been treated with something else.

However i first need to delete patients that have changed treatment.
0
 
awking00Connect With a Mentor Commented:
delete from yearlytreatmentdata
where eyeid in
(select eyeid from
 (select eyeid from yearlytreatmentdata where treatedwith <> 'PDT')
 union
 (select eyeid from yearlytreatmentdata where treatedwith = 'PDT'
  intersect
  select eyeid from yearlytreatmentdata where treatedwith <> 'PDT')
);
0
 
SharathConnect With a Mentor Data EngineerCommented:
you can also try this.
DELETE FROM #yearlytreatmentdata t1 
WHERE  NOT EXISTS (SELECT 1 
                   FROM   #yearlytreatmentdata t2 
                   WHERE  t1.EyeId = t2.EyeId 
                   GROUP  BY t2.EyeId 
                   HAVING COUNT(DISTINCT t2.TreatedWith) = 1 
                          AND MAX(t2.TreatedWith) = 'PDT') 

Open in new window

0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.