2016-09-26 3 views
0

Also muss ich Abfrage Spaltenwerte basierend auf einigen anderen Spaltenwerte ausgeben. Dafür habe ich mit cfloop jeden Wert aus meiner Abfrage-Spalte überprüft und dann die Werte gesetzt. Mein Code sieht wie folgt aus:ColdFusion-Abfrageausgabe?

<cfloop query="myQuery"> 
    <cfif status EQ "ABC" OR status EQ "DEF"> 
     <cfif trim(exitStatus) EQ ''> 
      <cfset col8val = #col8val#> 
     <cfelse> 
      <cfset col8val = #col8val# A> 
     </cfif> 
    </cfif> 
</cfloop> 

Also, was ich frage mich, sollte ich meine Ergebnisse an einem Ort zu speichern, verwenden, die Art und Weise habe ich nicht zu Schleife, ich will einfach nur nach dieser cfloop mein Ergebnis auf Dump über. Ich kann Array oder Struktur nicht verwenden, da beide zusätzliche Schleifen benötigen, um Ergebnisse zu erhalten. Ich habe auch versucht, dies in SQL zu tun, aber ich konnte zwei CASE-Anweisungen aus zwei verschiedenen Spalten nicht kombinieren. Wenn jemand mit diesem Problem helfen kann, lass es mich wissen.

+4

'SELECT CASE WHEN Status = 'ABC' ODER Status = 'DEF' UND (exitStatus = '' ODER exitStatus IS NULL) THEN col8val SONST col8val + 'A'' So etwas sollte in SQL funktionieren. Eine weitere Möglichkeit, die Abfrage selbst zu aktualisieren. http://www.bennadel.com/blog/1708-ask-ben-updating-columns-in-a-existing-coldfusion-query-object.htm. Ich würde mir beides anschauen, bevor ich eine Menge Loops schreibe. – Leeish

+1

Sobald Sie das Fallkonstrukt herausgefunden haben, können Sie jede Methode zeitlich festlegen. Während die Verwendung der Datenbank zum Anwenden Ihrer Logik die Notwendigkeit einer Schleife beseitigt, gibt es keine Garantie dafür, dass sie effizienter ist. –

+1

@Leeish Warum nicht einfach eine Antwort geben? Ich sehe so viele Kommentare zu Fragen, die fast Antworten sind. –

Antwort

2

Sie können eine Fallanweisung aus zwei verschiedenen Spalten erstellen, aber vielleicht wissen Sie einfach nicht wie. Ich würde weitere Untersuchungen darüber anstellen, welche Art von SQL Sie verwenden, um zu sehen, wie es gemacht wird. In SQL Server können Sie etwas tun:

SELECT CASE WHEN status IN ('ABC', 'DEF') AND COALESCE(exitStatus,'') = ''THEN col8val 
      ELSE col8val + 'A' 
     END AS TheNewValue 
FROM TableName 
WHERE .... 

Eine weitere Möglichkeit besteht darin, physisch die Abfrage Objekt zu bearbeiten und dieser Beitrag von Ben erklärt, wie das tun: Ask Ben: Updating Columns In An Existing ColdFusion Query Object.

Ihre genaue Frage aber:

Also, was ich frage mich, sollte ich meine Ergebnisse in einem Ort auf diese Weise ich Schleife haben nicht zu speichern, verwenden, möchte ich einfach nur mein Ergebnis Dump Stellen Sie nach diesem cfloop oben ein. Ich kann Array oder Struktur nicht verwenden, da beide zusätzliche Schleifen benötigen, um Ergebnisse zu erhalten.

Ich verstehe Ihre Frage nicht völlig. Sie möchten Ihre Ergebnisse an einem Ort speichern, aber Sie möchten kein Array oder eine Struktur verwenden. Nun, wenn Sie ein Array oder eine Struktur nicht verwenden können, wie in aller Welt können Sie Daten speichern, die nicht primitiv sind? Es ist auch nicht klar, wie Sie die Daten verwenden möchten. Es gibt ein paar Funktionen, die andere geschrieben haben, die eine Abfrage recht effizient in Arrays oder Strukturen oder Listen usw. umwandeln. Aber wenn Sie irgendwelche der Daten überprüfen und ändern müssen, besteht Ihre einzige Möglichkeit darin, eine Schleife zu schreiben oder die Funktion eines anderen zu benutzen und ändern Sie es, um die Prüfungen durchzuführen, die Sie benötigen, um die Daten zu ändern, oder ändern Sie Ihre SQL. Sie können zwar mit QoQ kreativ werden, aber ehrlich gesagt, wenn Sie sich damit beschäftigen, können Sie dies auch in der ursprünglichen Abfrage tun.