2016-05-06 10 views
0

Ich versuche, eine Abfrage zu schreiben, die die Aufzeichnungen über die Einrichtungen sowie die dazugehörigen Daten aus der Zuordnungstabelle holen werden. Meine Frage ist, wie:wie keine Nullwerte zu erhalten, während mysql Abfrage

select e.Name,ec.Name as EquipmentClassName, s.Name as SiteName 
from equipment e 
left join site s on (e.SiteID = s.ID or e.SiteID is NULL and s.ID is NULL) 
left join equipmentclass ec on e.EquipmentClassID=ec.ID 
where e.id like '%' and (
    (isNull(e.Name) OR e.Name= CASE WHEN COALESCE('','') = '' THEN e.Name ELSE '' END) 
and (isNull(e.EquipmentClassID) OR e.EquipmentClassID= CASE WHEN COALESCE('1','') = '' THEN e.EquipmentClassID ELSE '' END) 
and (isNull(e.SiteID) OR e.SiteID= CASE WHEN COALESCE('','') = '' THEN e.SiteID ELSE '' END) 
) 

ok, wenn ich übergeben keinen Parameter in der Klausel, wo bekomme ich alle Datensätze auch null Datensätze enthält. Aber wenn ich einen der Parameter übergeben, bekomme ich alle Datensätze wieder. Was ich hier erwarte, sind gefilterte Daten.

Angenommen, ich habe zwei Datensätze als Equip1, class1, null und Equi2, null, Site2

nun in der Klausel where i Class1 bin vorbei, so dass ich sollte einen einzelnen Datensatz erhalten, die anstelle von zwei Datensätze enthält class1 .

Wie kann ich das tun?

+0

Bitte die Tags aktualisieren. SQL Server und MySQL benötigen oft unterschiedliche Lösungen für das gleiche Problem. –

+1

Sorry für Tag-Problem. Habe nicht darauf geachtet, welche Tags ich auswähle. Mein Fehler – Roy

+0

Können Sie Beispieldatensätze und die Ausgabe bereitstellen, die Sie erwarten, dass die Probe produziert? SO hat einen [handlichen Leitfaden zur Bereitstellung von Beispieldaten] (http://stackoverflow.com/help/mcve), den Sie möglicherweise nützlich finden. Ich habe diese Frage nicht abgelehnt, deshalb kann ich nicht sicher sein, warum es eine Punktzahl von -1 hat. Aber wenn ich raten müsste, würde ich sagen, dass du Punkte verloren hast, weil deine Frage schwer zu lesen ist. –

Antwort

1
CREATE PROCEDURE equipmentData 
@Name     varchar(90) = null, 
@EquipmentClassID  varchar(90) = null, 
@LocationID    varchar(90) = null, 
@ParentEquipmentID  varchar(90) = null, 
@EquipmentLevelID  varchar(90) = null, 
@SiteID     varchar(90) = null 

AS 
BEGIN 

select e.ID, 
e.Name, 
ec.Name as EquipmentClassName, 
loc.Name as LocationName, 
    pe.Name as ParentEquipmentName , 
    eql.Name as EquipmentLevelName, 
    s.Name as SiteName, 
    ep.ID as EquipmentPropertyID, 
    ep.Name as EquipmentPropertyName, 
    ep.Description as EquipmentPropertyDesc, 
    ep.Mandatory, 
    ep.SeqNbr, 
    ep.DataType, 
    ep.RuleIDs, 
    ep.DefaultValue, 
    ep.UOM, 
    epv.Value 
from equipment e 
inner join equipmentclass ec   on e.EquipmentClassID=ec.ID 
left join site s      on (e.SiteID = s.ID or e.SiteID is NULL and s.ID is NULL) 
left join location loc     on e.LocationID=loc.ID 
left join equipment pe     on pe.ID=e.ParentEquipmentID 
left join equipmentlevel eql   on eql.ID = e.EquipmentLevelID 
left join extendedproperty ep   on ep.ObjectTypeID = e.ObjectTypeID 
left join extendedpropertyvalue epv  on epv.InstanceID = e.ID 
where 
e.id like '%' 
AND (e.Name    = @Name     or isnull(e.Name,'')= '') 
AND (@EquipmentClassID = @EquipmentClassID  or isnull(e.EquipmentClassID,'')= '') 
AND (@LocationID  = @LocationID   or isnull(e.LocationID,'')= '') 
AND (@ParentEquipmentID = @ParentEquipmentID or isnull(e.ParentEquipmentID,'')= '') 
AND (@EquipmentLevelID = @EquipmentLevelID  or isnull(e.EquipmentLevelID,'')= '') 
AND (@SiteID   = @SiteID    or isnull(e.SiteID,'')= '') 

END 

EXEC equipmentData @Name='',@EquipmentClassID='', 
@LocationID='',@ParentEquipmentID='',@EquipmentLevelID='',@SiteID='' 

Kopieren Sie den obigen Code mit Ausnahme der letzten Zeile heißt

EXEC equipmentData @Name='',@EquipmentClassID='', 
    @LocationID='',@ParentEquipmentID='',@EquipmentLevelID='',@SiteID='' 

und drücken Sie F5 dann die letzte Zeile Code ausführen, indem Parameter in Hochkomma vorbei nach Ihren need..you Ihre Daten erhalten.

+0

Danke für die Antwort pankaj. Sorry für meinen Mangel an Wissen, aber ich frage mich, wie kann ich EquipmentClassID in der Where-Klausel übergeben? – Roy

+0

ok ich habe es Ihre Anfrage .... entweder Sie können gespeicherte Prozedur machen, wenn gute Kenntnisse von T-SQL- oder einfach Variable im erklären Sie Code ok –

+0

Danke für die Hilfe pankaj aktualisiert Senden .. Aber ich bin immer Fehler beim Laufen der Code der gespeicherten Prozedur, wenn Sie einen Fehler in Ihrer SQL-Syntax haben; Sie in die Bedienungsanleitung für die richtige Syntax zu verwenden in der Nähe von '@Name varchar (90) = null, @EquipmentClassID varchar (90' in Zeile 2 – Roy

Verwandte Themen